perm filename INITEX.PSC[TEX,DEK] blob
sn#696997 filedate 1983-01-26 generic text, type T, neo UTF8
{4:}{9:}{$C-,A+,D-,W+}{[$C+,D:5,W+]}{:9}PROGRAM TEX;LABEL{6:}
1,9998,9999;{:6}CONST{11:}MEMMAX=37000;BUFSIZE=500;ERRORLINE=80;
HALFERRORLIN=50;MAXPRINTLINE=80;STACKSIZE=80;MAXINOPEN=6;FONTMAX=100;
FONTMEMSIZE=23000;PARAMSIZE=30;NESTSIZE=40;MAXSTRINGS=3000;
STRINGVACANC=8000;POOLSIZE=31000;SAVESIZE=300;TRIESIZE=8000;
DVIBUFSIZE=800;FILENAMESIZE=23;POOLNAME='TEX.POOL[TEX,SYS] ';{:11}
TYPE{18:}ASCIICODE=0..127;{:18}{25:}EIGHTBITS=0..255;
ALPHAFILE=PACKED FILE OF CHAR;BYTEFILE=PACKED FILE OF EIGHTBITS;{:25}
{38:}POOLPOINTER=0..POOLSIZE;STRNUMBER=0..MAXSTRINGS;{:38}{99:}
SCALED=INTEGER;NONNEGATIVEI=0..2147483647;SMALLNUMBER=0..63;{:99}{107:}
GLUERATIO=REAL;{:107}{111:}QUARTERWORD=0..511;HALFWORD=0..262143;
TWOCHOICES=1..2;FOURCHOICES=1..4;TWOHALVES=PACKED RECORD RH:HALFWORD;
CASE TWOCHOICES OF 1:(LH:HALFWORD);2:(B0:QUARTERWORD;B1:QUARTERWORD);
END;FOURQUARTERS=PACKED RECORD B0:QUARTERWORD;B1:QUARTERWORD;
B2:QUARTERWORD;B3:QUARTERWORD;END;
MEMORYWORD=PACKED RECORD CASE FOURCHOICES OF 1:(INT:INTEGER);
2:(GR:GLUERATIO);3:(HH:TWOHALVES);4:(QQQQ:FOURQUARTERS);END;
WORDFILE=FILE OF MEMORYWORD;{:111}{148:}GLUEORD=0..3;{:148}{210:}
LISTSTATEREC=RECORD MODEFIELD:-197..197;HEADFIELD,TAILFIELD:HALFWORD;
PGFIELD,AUXFIELD,MLFIELD:INTEGER;END;{:210}{256:}GROUPCODE=0..15;{:256}
{284:}INSTATERECOR=RECORD STATEFIELD,INDEXFIELD:QUARTERWORD;
STARTFIELD,LOCFIELD,LIMITFIELD,NAMEFIELD:HALFWORD;END;{:284}{519:}
INTERNALFONT=0..FONTMAX;{:519}{565:}DVIINDEX=0..DVIBUFSIZE;
PACKEDBYTES=PACKED ARRAY[DVIINDEX]OF EIGHTBITS;{:565}{880:}
TRIEPOINTER=0..TRIESIZE;{:880}{885:}HYPHPOINTER=0..307;{:885}VAR{13:}
BAD:INTEGER;{:13}{20:}XORD:ARRAY[CHAR]OF ASCIICODE;
XCHR:ARRAY[ASCIICODE]OF CHAR;{:20}{26:}
NAMEOFFILE:PACKED ARRAY[1..FILENAMESIZE]OF CHAR;
NAMELENGTH:0..FILENAMESIZE;{:26}{30:}
BUFFER:ARRAY[0..BUFSIZE]OF ASCIICODE;FIRST:0..BUFSIZE;LAST:0..BUFSIZE;
MAXBUFSTACK:0..BUFSIZE;AUXBUF:ARRAY[0..70]OF CHAR;{:30}{39:}
STRPOOL:PACKED ARRAY[POOLPOINTER]OF ASCIICODE;
STRSTART:ARRAY[STRNUMBER]OF POOLPOINTER;POOLPTR:POOLPOINTER;
STRPTR:STRNUMBER;{:39}{50:}POOLFILE:ALPHAFILE;{:50}{54:}
LOGFILE:ALPHAFILE;SELECTOR:0..21;DIG:ARRAY[0..22]OF 0..9;TALLY:INTEGER;
TERMOFFSET:0..MAXPRINTLINE;FILEOFFSET:0..MAXPRINTLINE;
TRICKBUF:ARRAY[0..ERRORLINE]OF ASCIICODE;TRICKCOUNT:INTEGER;
FIRSTCOUNT:INTEGER;{:54}{72:}INTERACTION:0..3;{:72}{75:}
DELETIONSALL:BOOLEAN;HISTORY:0..3;ERRORCOUNT:-1..100;{:75}{78:}
HELPLINE:ARRAY[0..5]OF STRNUMBER;HELPPTR:0..6;{:78}{94:}
INTERRUPT:INTEGER;OKTOINTERRUP:BOOLEAN;{:94}{102:}ARITHERROR:BOOLEAN;
REMAINDER:SCALED;{:102}{113:}TEMPPTR:HALFWORD;{:113}{114:}
MEM:ARRAY[0..MEMMAX]OF MEMORYWORD;{:114}{115:}VARUSED,DYNUSED:INTEGER;
MAXVARUSED:INTEGER;{:115}{116:}AVAIL:HALFWORD;MEMEND:HALFWORD;{:116}
{122:}ROVER:HALFWORD;{:122}{163:}
{FREE:PACKED ARRAY[0..MEMMAX]OF BOOLEAN;
WASFREE:PACKED ARRAY[0..MEMMAX]OF BOOLEAN;WASMEMEND:HALFWORD;
PANICKING:BOOLEAN;}{:163}{171:}FONTINSHORTD:INTEGER;{:171}{179:}
DEPTHTHRESHO:INTEGER;BREADTHMAX:INTEGER;{:179}{211:}
NEST:ARRAY[0..NESTSIZE]OF LISTSTATEREC;NESTPTR:0..NESTSIZE;
MAXNESTSTACK:0..NESTSIZE;CURLIST:LISTSTATEREC;SHOWNMODE:-197..197;{:211}
{235:}OLDSETTING:0..21;{:235}{240:}EQTB:ARRAY[1..4551]OF MEMORYWORD;
XEQLEVEL:ARRAY[3850..4551]OF QUARTERWORD;{:240}{243:}
HASH:ARRAY[258..2367]OF TWOHALVES;HASHUSED:HALFWORD;
NONEWCONTROL:BOOLEAN;CSPTR:HALFWORD;CSCOUNT:INTEGER;{:243}{258:}
SAVESTACK:ARRAY[0..SAVESIZE]OF MEMORYWORD;SAVEPTR:0..SAVESIZE;
MAXSAVESTACK:0..SAVESIZE;CURLEVEL:QUARTERWORD;CURGROUP:GROUPCODE;
CURBOUNDARY:0..SAVESIZE;{:258}{271:}MAGSET:INTEGER;{:271}{281:}
CURCMD:EIGHTBITS;CURCHR:HALFWORD;CURTOK:HALFWORD;{:281}{285:}
INPUTSTACK:ARRAY[0..STACKSIZE]OF INSTATERECOR;INPUTPTR:0..STACKSIZE;
MAXINSTACK:0..STACKSIZE;CURINPUT:INSTATERECOR;{:285}{288:}
INOPEN:0..MAXINOPEN;INPUTFILE:ARRAY[1..MAXINOPEN]OF ALPHAFILE;
LINE:INTEGER;LINESTACK:ARRAY[0..MAXINOPEN]OF INTEGER;PAGE:INTEGER;
PAGESTACK:ARRAY[0..MAXINOPEN]OF INTEGER;{:288}{289:}SCANNERSTATU:0..4;
WARNINGINDEX:HALFWORD;DEFREF:HALFWORD;{:289}{292:}
PARAMSTACK:ARRAY[0..PARAMSIZE]OF HALFWORD;PARAMPTR:0..PARAMSIZE;
MAXPARAMSTAC:INTEGER;{:292}{293:}ALIGNSTATE:INTEGER;{:293}{294:}
BASEPTR:0..STACKSIZE;{:294}{316:}PARLOC:HALFWORD;PARTOKEN:HALFWORD;
{:316}{343:}FORCEEOF:BOOLEAN;{:343}{363:}CURMARK:ARRAY[0..4]OF HALFWORD;
{:363}{368:}LONGSTATE:106..109;{:368}{369:}
PSTACK:ARRAY[0..8]OF HALFWORD;{:369}{388:}CURVAL:INTEGER;
CURVALLEVEL:0..6;{:388}{416:}RADIX:SMALLNUMBER;{:416}{426:}
CURORDER:GLUEORD;{:426}{455:}READFILE:ARRAY[0..15]OF ALPHAFILE;
READOPEN:ARRAY[0..15]OF 0..2;{:455}{463:}CONDPTR:HALFWORD;IFLIMIT:0..4;
CURIF:SMALLNUMBER;IFLINE:INTEGER;{:463}{467:}SKIPLINE,SKIPPAGE:INTEGER;
{:467}{483:}CURNAME:STRNUMBER;CURAREA:STRNUMBER;CUREXT:STRNUMBER;{:483}
{484:}AREADELIMITE:POOLPOINTER;EXTDELIMITER:POOLPOINTER;{:484}{491:}
TEXFORMATDEF:PACKED ARRAY[1..18]OF CHAR;{:491}{498:}
NAMEINPROGRE:BOOLEAN;JOBNAME:STRNUMBER;{:498}{503:}DVIFILE:BYTEFILE;
OUTPUTFILENA:STRNUMBER;{:503}{510:}TFMFILE:BYTEFILE;{:510}{520:}
FONTINFO:ARRAY[0..FONTMEMSIZE]OF MEMORYWORD;FMEMPTR:0..FONTMEMSIZE;
FONTPTR:INTERNALFONT;FONTIDENT:ARRAY[INTERNALFONT]OF HALFWORD;
FONTCHECK:ARRAY[INTERNALFONT]OF FOURQUARTERS;
FONTSIZE:ARRAY[INTERNALFONT]OF SCALED;
FONTDSIZE:ARRAY[INTERNALFONT]OF SCALED;
FONTPARAMS:ARRAY[INTERNALFONT]OF HALFWORD;
FONTNAME:ARRAY[INTERNALFONT]OF STRNUMBER;
FONTAREA:ARRAY[INTERNALFONT]OF STRNUMBER;
FONTBC:ARRAY[INTERNALFONT]OF EIGHTBITS;
FONTEC:ARRAY[INTERNALFONT]OF EIGHTBITS;
FONTGLUE:ARRAY[INTERNALFONT]OF HALFWORD;
FONTUSED:ARRAY[INTERNALFONT]OF BOOLEAN;{:520}{521:}
CHARBASE:ARRAY[INTERNALFONT]OF INTEGER;
WIDTHBASE:ARRAY[INTERNALFONT]OF INTEGER;
HEIGHTBASE:ARRAY[INTERNALFONT]OF INTEGER;
DEPTHBASE:ARRAY[INTERNALFONT]OF INTEGER;
ITALICBASE:ARRAY[INTERNALFONT]OF INTEGER;
LIGKERNBASE:ARRAY[INTERNALFONT]OF INTEGER;
KERNBASE:ARRAY[INTERNALFONT]OF INTEGER;
EXTENBASE:ARRAY[INTERNALFONT]OF INTEGER;
PARAMBASE:ARRAY[INTERNALFONT]OF INTEGER;{:521}{526:}
NULLCHARACTE:FOURQUARTERS;{:526}{563:}TOTALPAGES:INTEGER;MAXV:SCALED;
MAXH:SCALED;MAXPUSH:INTEGER;LASTBOP:INTEGER;DEADCYCLES:INTEGER;
DOINGLEADERS:BOOLEAN;C,F:QUARTERWORD;RULEHT,RULEDP,RULEWD:SCALED;
G:HALFWORD;LQ,LR,LX:INTEGER;{:563}{566:}DVIBUF:PACKEDBYTES;
HALFBUF:DVIINDEX;DVILIMIT:DVIINDEX;DVIPTR:DVIINDEX;DVIOFFSET:INTEGER;
DVIGONE:INTEGER;{:566}{576:}DOWNPTR,RIGHTPTR:HALFWORD;{:576}{587:}
DVIH,DVIV:SCALED;CURH,CURV:SCALED;DVIF:INTERNALFONT;CURS:INTEGER;{:587}
{617:}TOTALSTRETCH,TOTALSHRINK:ARRAY[GLUEORD]OF SCALED;{:617}{630:}
PARBEGINLINE:INTEGER;{:630}{652:}EMPTYFIELD:TWOHALVES;
NULLDELIMITE:FOURQUARTERS;{:652}{687:}CURMLIST:HALFWORD;
CURSTYLE:SMALLNUMBER;CURSIZE:SMALLNUMBER;CURMU:SCALED;
MLISTPENALTI:BOOLEAN;{:687}{692:}CURF:INTERNALFONT;CURC:QUARTERWORD;
CURI:FOURQUARTERS;{:692}{729:}MAGICOFFSET:INTEGER;{:729}{735:}
CURALIGN:HALFWORD;CURSPAN:HALFWORD;ALIGNPTR:HALFWORD;{:735}{774:}
JUSTBOX:HALFWORD;{:774}{781:}PASSIVE:HALFWORD;PRINTHEAD:HALFWORD;
PASSNUMBER:HALFWORD;{:781}{783:}ACTIVEWIDTH:ARRAY[1..6]OF SCALED;
CURACTIVEWID:ARRAY[1..6]OF SCALED;BACKGROUND:ARRAY[1..6]OF SCALED;
BREAKWIDTH:ARRAY[1..6]OF SCALED;{:783}{785:}NOSHRINKERRO:BOOLEAN;{:785}
{788:}CURP:HALFWORD;SECONDPASS:BOOLEAN;THRESHOLD:INTEGER;{:788}{793:}
MINIMALDEMER:ARRAY[0..3]OF SCALED;MINIMUMDEMER:SCALED;
BESTPLACE:ARRAY[0..3]OF HALFWORD;BESTPLLINE:ARRAY[0..3]OF HALFWORD;
{:793}{799:}DISCWIDTH:SCALED;{:799}{807:}EASYLINE:HALFWORD;
LASTSPECIALL:HALFWORD;FIRSTWIDTH:SCALED;SECONDWIDTH:SCALED;
FIRSTINDENT:SCALED;SECONDINDENT:SCALED;{:807}{832:}BESTBET:HALFWORD;
FEWESTDEMERI:INTEGER;BESTLINE:HALFWORD;ACTUALLOOSEN:INTEGER;
LINEDIFF:INTEGER;{:832}{852:}HC:ARRAY[0..65]OF HALFWORD;HN:SMALLNUMBER;
HA,HB:HALFWORD;HF:INTERNALFONT;HU:ARRAY[1..63]OF ASCIICODE;{:852}{860:}
HYF:ARRAY[0..64]OF 0..9;{:860}{865:}HYPHENPASSED:SMALLNUMBER;{:865}
{881:}TRIE:ARRAY[TRIEPOINTER]OF TWOHALVES;
HYFDISTANCE:ARRAY[QUARTERWORD]OF SMALLNUMBER;
HYFNUM:ARRAY[QUARTERWORD]OF SMALLNUMBER;
HYFNEXT:ARRAY[QUARTERWORD]OF QUARTERWORD;{:881}{886:}
HYPHWORD:ARRAY[HYPHPOINTER]OF STRNUMBER;
HYPHLIST:ARRAY[HYPHPOINTER]OF HALFWORD;HYPHCOUNT:HYPHPOINTER;{:886}
{903:}TRIEOPHASH:ARRAY[0..1022]OF QUARTERWORD;TRIEOPPTR:QUARTERWORD;
{:903}{905:}TRIEC:PACKED ARRAY[TRIEPOINTER]OF ASCIICODE;
TRIEO:PACKED ARRAY[TRIEPOINTER]OF QUARTERWORD;
TRIEL:PACKED ARRAY[TRIEPOINTER]OF TRIEPOINTER;
TRIER:PACKED ARRAY[TRIEPOINTER]OF TRIEPOINTER;TRIEPTR:TRIEPOINTER;{:905}
{906:}TRIEHASH:PACKED ARRAY[TRIEPOINTER]OF TRIEPOINTER;{:906}{910:}
TRIETAKEN:PACKED ARRAY[TRIEPOINTER]OF BOOLEAN;TRIEMIN:TRIEPOINTER;
TRIEMAX:TRIEPOINTER;{:910}{931:}BESTHEIGHTPL:SCALED;{:931}{940:}
PAGETAIL:HALFWORD;PAGECONTENTS:0..2;PAGEMAXDEPTH:SCALED;
BESTPAGEBREA:HALFWORD;LEASTPAGECOS:INTEGER;BESTSIZE:SCALED;{:940}{942:}
PAGESOFAR:ARRAY[0..7]OF SCALED;LASTPAGEGLUE:HALFWORD;
INSERTPENALT:INTEGER;{:942}{948:}OUTPUTACTIVE:BOOLEAN;{:948}{1032:}
CURBOX:HALFWORD;{:1032}{1233:}ERRHELPSEEN:BOOLEAN;{:1233}{1250:}
FORMATIDENT:STRNUMBER;{:1250}{1256:}FMTFILE:WORDFILE;{:1256}{1282:}
READYALREADY:INTEGER;{:1282}{1294:}WRITEFILE:ARRAY[0..15]OF ALPHAFILE;
WRITEOPEN:ARRAY[0..15]OF BOOLEAN;{:1294}{1297:}WRITELOC:HALFWORD;{:1297}
{1328:}PSEUDOTYPEIN:STRNUMBER;{:1328}PROCEDURE INITIALIZE;VAR{19:}
I:0..127;{:19}{161:}K:INTEGER;{:161}{887:}Z:HYPHPOINTER;{:887}BEGIN{8:}
{21:}XCHR[32]:=' ';XCHR[33]:='!';XCHR[34]:='"';XCHR[35]:='#';
XCHR[36]:='$';XCHR[37]:='%';XCHR[38]:='&';XCHR[39]:='''';XCHR[40]:='(';
XCHR[41]:=')';XCHR[42]:='*';XCHR[43]:='+';XCHR[44]:=',';XCHR[45]:='-';
XCHR[46]:='.';XCHR[47]:='/';XCHR[48]:='0';XCHR[49]:='1';XCHR[50]:='2';
XCHR[51]:='3';XCHR[52]:='4';XCHR[53]:='5';XCHR[54]:='6';XCHR[55]:='7';
XCHR[56]:='8';XCHR[57]:='9';XCHR[58]:=':';XCHR[59]:=';';XCHR[60]:='<';
XCHR[61]:='=';XCHR[62]:='>';XCHR[63]:='?';XCHR[64]:='@';XCHR[65]:='A';
XCHR[66]:='B';XCHR[67]:='C';XCHR[68]:='D';XCHR[69]:='E';XCHR[70]:='F';
XCHR[71]:='G';XCHR[72]:='H';XCHR[73]:='I';XCHR[74]:='J';XCHR[75]:='K';
XCHR[76]:='L';XCHR[77]:='M';XCHR[78]:='N';XCHR[79]:='O';XCHR[80]:='P';
XCHR[81]:='Q';XCHR[82]:='R';XCHR[83]:='S';XCHR[84]:='T';XCHR[85]:='U';
XCHR[86]:='V';XCHR[87]:='W';XCHR[88]:='X';XCHR[89]:='Y';XCHR[90]:='Z';
XCHR[91]:='[';XCHR[92]:='\';XCHR[93]:=']';XCHR[94]:='↑';XCHR[95]:='_';
XCHR[96]:='`';XCHR[97]:='a';XCHR[98]:='b';XCHR[99]:='c';XCHR[100]:='d';
XCHR[101]:='e';XCHR[102]:='f';XCHR[103]:='g';XCHR[104]:='h';
XCHR[105]:='i';XCHR[106]:='j';XCHR[107]:='k';XCHR[108]:='l';
XCHR[109]:='m';XCHR[110]:='n';XCHR[111]:='o';XCHR[112]:='p';
XCHR[113]:='q';XCHR[114]:='r';XCHR[115]:='s';XCHR[116]:='t';
XCHR[117]:='u';XCHR[118]:='v';XCHR[119]:='w';XCHR[120]:='x';
XCHR[121]:='y';XCHR[122]:='z';XCHR[123]:='{';XCHR[124]:='|';
XCHR[125]:='}';XCHR[126]:='~';XCHR[0]:=' ';XCHR[127]:=' ';{:21}{23:}
FOR I:=1 TO 31 DO XCHR[I]:=CHR(I);XCHR[24]:=CHR(95);XCHR[26]:=CHR(27);
XCHR[27]:=CHR(126);{:23}{24:}FOR I:=0 TO 127 DO XORD[CHR(I)]:=127;
FOR I:=1 TO 126 DO XORD[XCHR[I]]:=I;{:24}{73:}INTERACTION:=3;{:73}{76:}
DELETIONSALL:=TRUE;HISTORY:=0;ERRORCOUNT:=0;{:76}{95:}INTERRUPT:=0;
OKTOINTERRUP:=TRUE;{:95}{164:}{WASMEMEND:=0;PANICKING:=FALSE;}{:164}
{213:}NESTPTR:=0;MAXNESTSTACK:=0;CURLIST.MODEFIELD:=1;
CURLIST.HEADFIELD:=25001;CURLIST.TAILFIELD:=25001;
CURLIST.AUXFIELD:=-65536000;CURLIST.MLFIELD:=0;CURLIST.PGFIELD:=0;
SHOWNMODE:=0;{950:}PAGECONTENTS:=0;PAGETAIL:=25002;MEM[25002].HH.RH:=0;
LASTPAGEGLUE:=262143;PAGESOFAR[7]:=0;PAGEMAXDEPTH:=0{:950};{:213}{241:}
FOR K:=3850 TO 4551 DO XEQLEVEL[K]:=1;{:241}{244:}NONEWCONTROL:=TRUE;
HASH[258].LH:=0;HASH[258].RH:=0;
FOR K:=259 TO 2367 DO HASH[K]:=HASH[258];{:244}{259:}SAVEPTR:=0;
CURLEVEL:=1;CURGROUP:=0;CURBOUNDARY:=0;MAXSAVESTACK:=0;{:259}{272:}
MAGSET:=0;{:272}{364:}CURMARK[0]:=0;CURMARK[1]:=0;CURMARK[2]:=0;
CURMARK[3]:=0;CURMARK[4]:=0;{:364}{417:}CURVAL:=0;CURVALLEVEL:=0;
RADIX:=0;{:417}{456:}FOR K:=0 TO 15 DO READOPEN[K]:=2;{:456}{464:}
CONDPTR:=0;IFLIMIT:=0;CURIF:=0;IFLINE:=0;{:464}{492:}
TEXFORMATDEF:='PLAIN.fmt[tex,sys]';{:492}{522:}
FOR K:=0 TO FONTMAX DO FONTUSED[K]:=FALSE;{:522}{527:}
NULLCHARACTE.B0:=0;NULLCHARACTE.B1:=0;NULLCHARACTE.B2:=0;
NULLCHARACTE.B3:=0;{:527}{564:}TOTALPAGES:=0;MAXV:=0;MAXH:=0;MAXPUSH:=0;
LASTBOP:=-1;DOINGLEADERS:=FALSE;DEADCYCLES:=0;{:564}{567:}
HALFBUF:=DVIBUFSIZE DIV 2;DVILIMIT:=DVIBUFSIZE;DVIPTR:=0;DVIOFFSET:=0;
DVIGONE:=0;{:567}{577:}DOWNPTR:=0;RIGHTPTR:=0;{:577}{631:}
PARBEGINLINE:=0;{:631}{653:}EMPTYFIELD.RH:=0;EMPTYFIELD.LH:=0;
NULLDELIMITE.B0:=0;NULLDELIMITE.B1:=0;NULLDELIMITE.B2:=0;
NULLDELIMITE.B3:=0;{:653}{736:}ALIGNPTR:=0;CURALIGN:=0;CURSPAN:=0;{:736}
{888:}FOR Z:=0 TO 307 DO BEGIN HYPHWORD[Z]:=0;HYPHLIST[Z]:=0;END;
HYPHCOUNT:=0;{:888}{949:}OUTPUTACTIVE:=FALSE;INSERTPENALT:=0;{:949}
{1234:}ERRHELPSEEN:=FALSE;{:1234}{1251:}FORMATIDENT:=0;{:1251}{1283:}
READYALREADY:=314159;{:1283}{1295:}
FOR K:=0 TO 15 DO WRITEOPEN[K]:=FALSE;{:1295}{1329:}PSEUDOTYPEIN:=0;
PAGE:=0;{:1329}{162:}FOR K:=1 TO 19 DO MEM[K].INT:=0;K:=0;
WHILE K<20 DO BEGIN MEM[K].HH.RH:=1;MEM[K].HH.B0:=0;MEM[K].HH.B1:=0;
K:=K+4;END;MEM[6].INT:=65536;MEM[4].HH.B0:=1;MEM[10].INT:=65536;
MEM[8].HH.B0:=2;MEM[14].INT:=65536;MEM[12].HH.B0:=1;MEM[15].INT:=65536;
MEM[12].HH.B1:=1;MEM[18].INT:=-65536;MEM[16].HH.B0:=1;ROVER:=20;
MEM[ROVER].HH.RH:=262143;MEM[ROVER].HH.LH:=25000-ROVER;
MEM[ROVER+1].HH.LH:=ROVER;MEM[ROVER+1].HH.RH:=ROVER;MEM[25000].HH.RH:=0;
MEM[25000].HH.LH:=0;FOR K:=25001 TO 25013 DO MEM[K]:=MEM[25000];{754:}
MEM[25010].HH.LH:=6459;{:754}{759:}MEM[25009].HH.RH:=512;
MEM[25009].HH.LH:=0;{:759}{780:}MEM[25006].HH.B0:=1;
MEM[25007].HH.LH:=262143;MEM[25006].HH.B1:=0;{:780}{941:}
MEM[25000].HH.B1:=255;MEM[25000].HH.B0:=1;MEM[25000].HH.RH:=25000;{:941}
{947:}MEM[25002].HH.B0:=10;MEM[25002].HH.B1:=0;{:947};AVAIL:=0;
MEMEND:=25013;VARUSED:=20;DYNUSED:=14;MAXVARUSED:=VARUSED;{:162}{219:}
EQTB[2368].HH.B0:=98;EQTB[2368].HH.RH:=0;EQTB[2368].HH.B1:=0;
FOR K:=1 TO 2367 DO EQTB[K]:=EQTB[2368];{:219}{224:}EQTB[2369].HH.RH:=0;
EQTB[2369].HH.B1:=1;EQTB[2369].HH.B0:=111;
FOR K:=2370 TO 2897 DO EQTB[K]:=EQTB[2369];
MEM[0].HH.RH:=MEM[0].HH.RH+529;{:224}{227:}EQTB[2898].HH.RH:=0;
EQTB[2898].HH.B0:=112;EQTB[2898].HH.B1:=1;
FOR K:=2899 TO 2903 DO EQTB[K]:=EQTB[2368];EQTB[2904].HH.RH:=0;
EQTB[2904].HH.B0:=113;EQTB[2904].HH.B1:=1;
FOR K:=2905 TO 3159 DO EQTB[K]:=EQTB[2904];EQTB[3160].HH.RH:=0;
EQTB[3160].HH.B0:=114;EQTB[3160].HH.B1:=1;
FOR K:=3161 TO 3208 DO EQTB[K]:=EQTB[3160];EQTB[3209].HH.RH:=0;
EQTB[3209].HH.B0:=114;EQTB[3209].HH.B1:=1;
FOR K:=3210 TO 3849 DO EQTB[K]:=EQTB[3209];
FOR K:=0 TO 127 DO BEGIN EQTB[3210+K].HH.RH:=12;EQTB[3338+K].HH.RH:=K;
EQTB[3722+K].HH.RH:=1000;END;EQTB[3223].HH.RH:=5;EQTB[3242].HH.RH:=10;
EQTB[3302].HH.RH:=0;EQTB[3222].HH.RH:=5;EQTB[3337].HH.RH:=15;
EQTB[3210].HH.RH:=9;FOR K:=65 TO 90 DO BEGIN EQTB[3210+K].HH.RH:=11;
EQTB[3210+K+32].HH.RH:=11;EQTB[3338+K].HH.RH:=K+28672;
EQTB[3338+K+32].HH.RH:=K+28704;EQTB[3466+K].HH.RH:=K+32;
EQTB[3466+K+32].HH.RH:=K+32;EQTB[3594+K].HH.RH:=K;
EQTB[3594+K+32].HH.RH:=K;EQTB[3722+K].HH.RH:=999;END;{:227}{232:}
FOR K:=3850 TO 4148 DO EQTB[K].INT:=0;EQTB[3867].INT:=1000;
EQTB[3851].INT:=10000;EQTB[3890].INT:=1;EQTB[3889].INT:=25;
FOR K:=0 TO 127 DO EQTB[4149+K].INT:=-1;EQTB[4195].INT:=0;{:232}{239:}
FOR K:=4277 TO 4551 DO EQTB[K].INT:=0;{:239}{245:}HASHUSED:=2358;
CSCOUNT:=0;{:245}{523:}FONTPTR:=0;FMEMPTR:=7;FONTNAME[0]:=622;
FONTAREA[0]:=228;FONTBC[0]:=1;FONTEC[0]:=0;FONTSIZE[0]:=0;
FONTDSIZE[0]:=0;FONTGLUE[0]:=0;FONTPARAMS[0]:=7;PARAMBASE[0]:=-1;
FONTIDENT[0]:=2367;FOR K:=0 TO 6 DO FONTINFO[K].INT:=0;{:523}{912:}
TRIEOPPTR:=0;TRIE[0].RH:=0;TRIE[0].B1:=0;TRIE[0].B0:=0;
FOR K:=1 TO 127 DO TRIE[K]:=TRIE[0];TRIEMAX:=127;{:912}{1177:}
HASH[2358].RH:=997;{:1177}{1252:}FORMATIDENT:=1089;{:1252}{1320:}
HASH[2366].RH:=1130;EQTB[2366].HH.B1:=1;EQTB[2366].HH.B0:=108;
EQTB[2366].HH.RH:=0;{:1320}{:8}END;{56:}PROCEDURE PRINTLN;
BEGIN CASE SELECTOR OF 19:BEGIN WRITELN(TTY);WRITELN(LOGFILE);
TERMOFFSET:=0;FILEOFFSET:=0;END;18:BEGIN WRITELN(LOGFILE);FILEOFFSET:=0;
END;17:BEGIN WRITELN(TTY);TERMOFFSET:=0;END;16,20,21:;
OTHERS:WRITELN(WRITEFILE[SELECTOR])END;END;{:56}{57:}
PROCEDURE PRINTCHAR(C:ASCIICODE);
BEGIN CASE SELECTOR OF 19:BEGIN WRITE(TTY,XCHR[C]);
WRITE(LOGFILE,XCHR[C]);TERMOFFSET:=TERMOFFSET+1;
FILEOFFSET:=FILEOFFSET+1;
IF TERMOFFSET=MAXPRINTLINE THEN BEGIN WRITELN(TTY);TERMOFFSET:=0;END;
IF FILEOFFSET=MAXPRINTLINE THEN BEGIN WRITELN(LOGFILE);FILEOFFSET:=0;
END;END;18:BEGIN WRITE(LOGFILE,XCHR[C]);FILEOFFSET:=FILEOFFSET+1;
IF FILEOFFSET=MAXPRINTLINE THEN PRINTLN;END;17:BEGIN WRITE(TTY,XCHR[C]);
TERMOFFSET:=TERMOFFSET+1;IF TERMOFFSET=MAXPRINTLINE THEN PRINTLN;END;
16:;20:IF TALLY<TRICKCOUNT THEN TRICKBUF[TALLY MOD ERRORLINE]:=C;
21:BEGIN IF POOLPTR<POOLSIZE THEN BEGIN STRPOOL[POOLPTR]:=C;
POOLPTR:=POOLPTR+1;END;END;OTHERS:WRITE(WRITEFILE[SELECTOR],XCHR[C])END;
TALLY:=TALLY+1;END;{:57}{58:}PROCEDURE PRINT(S:INTEGER);
VAR J:POOLPOINTER;BEGIN IF(S<0)OR(S>=STRPTR)THEN S:=131;J:=STRSTART[S];
WHILE J<STRSTART[S+1]DO BEGIN PRINTCHAR(STRPOOL[J]);J:=J+1;END;END;{:58}
{59:}PROCEDURE SLOWPRINT(S:INTEGER);VAR J:POOLPOINTER;
BEGIN IF(S<0)OR(S>=STRPTR)THEN S:=131;J:=STRSTART[S];
WHILE J<STRSTART[S+1]DO BEGIN PRINT(STRPOOL[J]);J:=J+1;END;END;{:59}
{61:}PROCEDURE PRINTNL(S:STRNUMBER);
BEGIN IF((TERMOFFSET>0)AND(ODD(SELECTOR)))OR((FILEOFFSET>0)AND(SELECTOR
>=18))THEN PRINTLN;PRINT(S);END;{:61}{62:}
PROCEDURE PRINTESC(S:STRNUMBER);BEGIN PRINTCHAR(92);PRINT(S);END;{:62}
{63:}PROCEDURE PRINTDIGS(K:EIGHTBITS);BEGIN WHILE K>0 DO BEGIN K:=K-1;
PRINTCHAR(48+DIG[K]);END;END;{:63}{64:}PROCEDURE PRINTINT(N:INTEGER);
VAR K:0..20;M:NONNEGATIVEI;BEGIN K:=0;IF N<0 THEN BEGIN PRINTCHAR(45);
IF N>-100000000 THEN N:=-N ELSE BEGIN M:=-1-N;N:=M DIV 10;
M:=(M MOD 10)+1;K:=1;IF M<10 THEN DIG[0]:=M ELSE BEGIN DIG[0]:=0;N:=N+1;
END;END;END;REPEAT DIG[K]:=N MOD 10;N:=N DIV 10;K:=K+1;UNTIL N=0;
PRINTDIGS(K);END;{:64}{249:}PROCEDURE PRINTCS(P:HALFWORD);
BEGIN IF P<258 THEN IF P>=129 THEN IF P<257 THEN PRINT(P-129)ELSE PRINT(
328)ELSE IF P<1 THEN PRINTESC(329)ELSE BEGIN PRINTESC(P-1);
IF EQTB[3210+P-1].HH.RH=11 THEN PRINTCHAR(32);
END ELSE IF P>=2368 THEN PRINTESC(329)ELSE IF(HASH[P].RH<128)OR(HASH[P].
RH>=STRPTR)THEN PRINTESC(330)ELSE BEGIN PRINTCHAR(92);
SLOWPRINT(HASH[P].RH);PRINTCHAR(32);END;END;{:249}{250:}
PROCEDURE SPRINTCS(P:HALFWORD);
BEGIN IF P<258 THEN IF P<129 THEN PRINTESC(P-1)ELSE IF P<257 THEN PRINT(
P-129)ELSE PRINT(328)ELSE BEGIN PRINTCHAR(92);SLOWPRINT(HASH[P].RH);END;
END;{:250}{489:}PROCEDURE PRINTFILENAM(N,A,E:STRNUMBER);BEGIN PRINT(N);
PRINT(E);PRINT(A);END;{:489}{667:}PROCEDURE PRINTSIZE(S:INTEGER);
BEGIN IF S=0 THEN PRINTESC(703)ELSE IF S=16 THEN PRINTESC(704)ELSE
PRINTESC(705);END;{:667}{77:}PROCEDURE NORMALIZESEL;FORWARD;
PROCEDURE GETTOKEN;FORWARD;PROCEDURE TERMINPUT;FORWARD;
PROCEDURE SHOWCONTEXT;FORWARD;PROCEDURE BEGINFILEREA;FORWARD;
PROCEDURE OPENLOGFILE;FORWARD;PROCEDURE CLOSEFILESAN;FORWARD;
PROCEDURE CLEARFORERRO;FORWARD;{PROCEDURE DEBUGHELP;FORWARD;}{:77}{79:}
PROCEDURE JUMPOUT;BEGIN GOTO 9998;END;{:79}{80:}PROCEDURE ERROR;
LABEL 22,10;VAR C:ASCIICODE;S1,S2,S3,S4:INTEGER;
BEGIN IF HISTORY<2 THEN HISTORY:=2;PRINTCHAR(46);SHOWCONTEXT;
IF INTERACTION=3 THEN{81:}WHILE TRUE DO BEGIN 22:CLEARFORERRO;
BEGIN PRINT(135);TERMINPUT;END;IF LAST=FIRST THEN GOTO 10;
C:=BUFFER[FIRST];IF C>=97 THEN C:=C-32;{82:}
CASE C OF 49,50,51,52,53,54,55,56,57:IF DELETIONSALL THEN{86:}
BEGIN S1:=CURTOK;S2:=CURCMD;S3:=CURCHR;S4:=ALIGNSTATE;
ALIGNSTATE:=1000000;OKTOINTERRUP:=FALSE;
IF(LAST>FIRST+1)AND(BUFFER[FIRST+1]>=48)AND(BUFFER[FIRST+1]<=57)THEN C:=
C*10+BUFFER[FIRST+1]-48*11 ELSE C:=C-48;WHILE C>0 DO BEGIN GETTOKEN;
C:=C-1;END;CURTOK:=S1;CURCMD:=S2;CURCHR:=S3;ALIGNSTATE:=S4;
OKTOINTERRUP:=TRUE;BEGIN HELPPTR:=2;HELPLINE[1]:=145;HELPLINE[0]:=146;
END;SHOWCONTEXT;GOTO 22;END{:86};{68:BEGIN DEBUGHELP;GOTO 22;END;}
69,84:IF BASEPTR>0 THEN BEGIN SELECTOR:=21;POOLPTR:=STRSTART[STRPTR];
PRINT(136);PRINT(INPUTSTACK[BASEPTR].NAMEFIELD);PRINTCHAR(47);
PRINTINT(PAGE);PRINT(137);PRINTINT(LINE);PRINTCHAR(108);
IF STRPTR<MAXSTRINGS THEN BEGIN PSEUDOTYPEIN:=STRPTR;STRPTR:=STRPTR+1;
STRSTART[STRPTR]:=POOLPTR;END;SELECTOR:=19;INTERACTION:=2;JUMPOUT;END;
72:{87:}BEGIN IF HELPPTR=0 THEN BEGIN HELPPTR:=2;HELPLINE[1]:=147;
HELPLINE[0]:=148;END;REPEAT HELPPTR:=HELPPTR-1;PRINT(HELPLINE[HELPPTR]);
PRINTLN;UNTIL HELPPTR=0;BEGIN HELPPTR:=4;HELPLINE[3]:=149;
HELPLINE[2]:=148;HELPLINE[1]:=150;HELPLINE[0]:=151;END;GOTO 22;END{:87};
73:{85:}BEGIN BEGINFILEREA;
IF LAST>FIRST+1 THEN BEGIN CURINPUT.LOCFIELD:=FIRST+1;BUFFER[FIRST]:=32;
END ELSE BEGIN BEGIN PRINT(144);TERMINPUT;END;CURINPUT.LOCFIELD:=FIRST;
END;FIRST:=LAST;CURINPUT.LIMITFIELD:=LAST-1;GOTO 10;END{:85};
81,82,83:{84:}BEGIN ERRORCOUNT:=0;INTERACTION:=0+C-81;
IF C=81 THEN SELECTOR:=SELECTOR-1;PRINTLN;GOTO 10;END{:84};
88:BEGIN INTERACTION:=2;JUMPOUT;END;OTHERS:END;{83:}PRINT(138);
PRINTNL(139);PRINTNL(140);IF BASEPTR>0 THEN PRINT(141);
IF DELETIONSALL THEN PRINTNL(142);PRINTNL(143){:83}{:82};END{:81};
ERRORCOUNT:=ERRORCOUNT+1;IF ERRORCOUNT=100 THEN BEGIN PRINTNL(134);
HISTORY:=3;JUMPOUT;END;{88:}IF INTERACTION>0 THEN SELECTOR:=SELECTOR-1;
WHILE HELPPTR>0 DO BEGIN HELPPTR:=HELPPTR-1;PRINTNL(HELPLINE[HELPPTR]);
END;PRINTLN;IF INTERACTION>0 THEN SELECTOR:=SELECTOR+1;PRINTLN{:88};
10:END;{:80}{91:}PROCEDURE FATALERROR(S:STRNUMBER);BEGIN NORMALIZESEL;
PRINTNL(153);BEGIN HELPPTR:=1;HELPLINE[0]:=S;END;
BEGIN IF INTERACTION=3 THEN INTERACTION:=2;ERROR;
{IF INTERACTION>0 THEN DEBUGHELP;}HISTORY:=3;JUMPOUT;END;END;{:91}{92:}
PROCEDURE OVERFLOW(S:STRNUMBER;N:INTEGER);BEGIN NORMALIZESEL;
PRINTNL(154);PRINT(S);PRINTCHAR(61);PRINTINT(N);PRINTCHAR(93);
BEGIN HELPPTR:=2;HELPLINE[1]:=155;HELPLINE[0]:=156;END;
BEGIN IF INTERACTION=3 THEN INTERACTION:=2;ERROR;
{IF INTERACTION>0 THEN DEBUGHELP;}HISTORY:=3;JUMPOUT;END;END;{:92}{93:}
PROCEDURE CONFUSION(S:STRNUMBER);BEGIN NORMALIZESEL;
IF HISTORY<2 THEN BEGIN PRINTNL(157);PRINT(S);PRINTCHAR(41);
BEGIN HELPPTR:=1;HELPLINE[0]:=158;END;END ELSE BEGIN PRINTNL(159);
BEGIN HELPPTR:=2;HELPLINE[1]:=160;HELPLINE[0]:=161;END;END;
BEGIN IF INTERACTION=3 THEN INTERACTION:=2;ERROR;
{IF INTERACTION>0 THEN DEBUGHELP;}HISTORY:=3;JUMPOUT;END;END;{:93}{:4}
{27:}FUNCTION AOPENIN(VAR F:ALPHAFILE):BOOLEAN;
BEGIN RESET(F,NAMEOFFILE,'/E/O/N:19');AOPENIN:=NOT EOF(F);END;
FUNCTION AOPENOUT(VAR F:ALPHAFILE):BOOLEAN;
BEGIN REWRITE(F,NAMEOFFILE,'/O');AOPENOUT:=EOF(F);END;
FUNCTION BOPENIN(VAR F:BYTEFILE):BOOLEAN;
BEGIN RESET(F,NAMEOFFILE,'/B:8/O/N:19');BOPENIN:=NOT EOF(F);END;
FUNCTION BOPENOUT(VAR F:BYTEFILE):BOOLEAN;
BEGIN REWRITE(F,NAMEOFFILE,'/O/N:19');BOPENOUT:=EOF(F);END;
FUNCTION WOPENIN(VAR F:WORDFILE):BOOLEAN;
BEGIN RESET(F,NAMEOFFILE,'/O/N:19');WOPENIN:=NOT EOF(F);END;
FUNCTION WOPENOUT(VAR F:WORDFILE):BOOLEAN;
BEGIN REWRITE(F,NAMEOFFILE,'/O/N:19');WOPENOUT:=EOF(F);END;{:27}{28:}
PROCEDURE ACLOSE(VAR F:ALPHAFILE);BEGIN CLOSE(F);END;
PROCEDURE BCLOSE(VAR F:BYTEFILE);BEGIN CLOSE(F);END;
PROCEDURE WCLOSE(VAR F:WORDFILE);BEGIN CLOSE(F);END;{:28}{31:}
FUNCTION INPUTLN(VAR F:ALPHAFILE):BOOLEAN;LABEL 1;VAR N:INTEGER;
K,M:0..BUFSIZE;BEGIN GET(F);IF F↑=CHR(10)THEN GET(F);
IF EOF(F)THEN INPUTLN:=FALSE ELSE BEGIN LAST:=FIRST;READ(F,AUXBUF:N);
IF BUFFER[FIRST]=12 THEN BEGIN PAGE:=PAGE+1;LINE:=1;END;
1:IF LAST+N>MAXBUFSTACK THEN IF LAST+N>=BUFSIZE THEN BEGIN MAXBUFSTACK:=
BUFSIZE;OVERFLOW(128,BUFSIZE);END ELSE MAXBUFSTACK:=LAST+N;
IF N>0 THEN BEGIN M:=LAST;IF N=72 THEN LAST:=M+71 ELSE LAST:=M+N;
FOR K:=M TO LAST-1 DO BUFFER[K]:=XORD[AUXBUF[K-M]];
IF N=72 THEN BEGIN READ(F,AUXBUF:N);GOTO 1;END;
END ELSE IF F↑=CHR(12)THEN BEGIN AUXBUF[0]:=F↑;N:=1;GOTO 1;END;
INPUTLN:=TRUE;END;END;{:31}{37:}PROCEDURE ESCI(VAR X:INTEGER);EXTERN;
FUNCTION RESCAN:BOOLEAN;EXTERN;FUNCTION TMPIN(F:STRING;
VAR S:STRING):INTEGER;EXTERN;FUNCTION CCLSW:BOOLEAN;EXTERN;
PROCEDURE PTWR1W(PTY,C:INTEGER);EXTERN;FUNCTION INITTERMINAL:BOOLEAN;
LABEL 10;VAR L:INTEGER;LINEFOUND:BOOLEAN;
TMPCORBUF:PACKED ARRAY[0..100]OF CHAR;BEGIN;ESCI(INTERRUPT);LAST:=FIRST;
IF CCLSW THEN BEGIN L:=TMPIN('TEX',TMPCORBUF);CURINPUT.LOCFIELD:=1;
WHILE(CURINPUT.LOCFIELD<L)AND(TMPCORBUF[CURINPUT.LOCFIELD]<>'←')DO
CURINPUT.LOCFIELD:=CURINPUT.LOCFIELD+1;
CURINPUT.LOCFIELD:=CURINPUT.LOCFIELD+1;
WHILE CURINPUT.LOCFIELD<L DO BEGIN IF TMPCORBUF[CURINPUT.LOCFIELD]>' '
THEN BEGIN BUFFER[LAST]:=XORD[TMPCORBUF[CURINPUT.LOCFIELD]];
LAST:=LAST+1;END;CURINPUT.LOCFIELD:=CURINPUT.LOCFIELD+1;END;
END ELSE{IF FALSE THEN}IF RESCAN THEN BEGIN READLN(TTY);
WHILE(NOT EOLN(TTY))AND(TTY↑<>';')DO GET(TTY);
IF TTY↑=';'THEN BEGIN GET(TTY);
WHILE NOT EOLN(TTY)DO BEGIN BUFFER[LAST]:=XORD[TTY↑];LAST:=LAST+1;
GET(TTY);END;END;END;LINEFOUND:=(LAST>FIRST);
WHILE TRUE DO BEGIN CURINPUT.LOCFIELD:=FIRST;
WHILE(CURINPUT.LOCFIELD<LAST)AND(BUFFER[CURINPUT.LOCFIELD]=32)DO
CURINPUT.LOCFIELD:=CURINPUT.LOCFIELD+1;
IF CURINPUT.LOCFIELD<LAST THEN BEGIN INITTERMINAL:=TRUE;GOTO 10;END;
IF LINEFOUND THEN WRITELN(TTY,'Please type the name of your input file.'
);WRITE(TTY,'**');BREAK(TTY);BUFFER[FIRST]:=0;
IF NOT INPUTLN(TTY)THEN BEGIN WRITELN(TTY);
WRITE(TTY,'! End of file on the terminal... why?');INITTERMINAL:=FALSE;
GOTO 10;END;LINEFOUND:=TRUE;END;10:END;{:37}{43:}
FUNCTION MAKESTRING:STRNUMBER;
BEGIN IF STRPTR=MAXSTRINGS THEN OVERFLOW(130,MAXSTRINGS);
STRPTR:=STRPTR+1;STRSTART[STRPTR]:=POOLPTR;MAKESTRING:=STRPTR-1;END;
{:43}{45:}FUNCTION STREQBUF(S:STRNUMBER;K:INTEGER):BOOLEAN;LABEL 45;
VAR J:POOLPOINTER;RESULT:BOOLEAN;BEGIN J:=STRSTART[S];RESULT:=FALSE;
WHILE J<STRSTART[S+1]DO BEGIN IF STRPOOL[J]<>BUFFER[K]THEN GOTO 45;
J:=J+1;K:=K+1;END;RESULT:=TRUE;45:STREQBUF:=RESULT;END;{:45}{46:}
FUNCTION STREQSTR(S,T:STRNUMBER):BOOLEAN;LABEL 45;VAR J,K:POOLPOINTER;
RESULT:BOOLEAN;BEGIN RESULT:=FALSE;
IF(STRSTART[S+1]-STRSTART[S])<>(STRSTART[T+1]-STRSTART[T])THEN GOTO 45;
J:=STRSTART[S];K:=STRSTART[T];
WHILE J<STRSTART[S+1]DO BEGIN IF STRPOOL[J]<>STRPOOL[K]THEN GOTO 45;
J:=J+1;K:=K+1;END;RESULT:=TRUE;45:STREQSTR:=RESULT;END;{:46}{47:}
FUNCTION INITSTRINGS:BOOLEAN;LABEL 30,10;VAR K,L:0..127;M,N:CHAR;
G:STRNUMBER;A:INTEGER;C:BOOLEAN;BEGIN POOLPTR:=0;STRPTR:=0;
STRSTART[0]:=0;{48:}FOR K:=0 TO 127 DO BEGIN IF(K<32)AND({49:}
K IN[0,9..13,27]{:49})THEN BEGIN BEGIN STRPOOL[POOLPTR]:=94;
POOLPTR:=POOLPTR+1;END;BEGIN STRPOOL[POOLPTR]:=94;POOLPTR:=POOLPTR+1;
END;BEGIN STRPOOL[POOLPTR]:=K+64;POOLPTR:=POOLPTR+1;END;
END ELSE IF K=127 THEN BEGIN BEGIN STRPOOL[POOLPTR]:=94;
POOLPTR:=POOLPTR+1;END;BEGIN STRPOOL[POOLPTR]:=94;POOLPTR:=POOLPTR+1;
END;BEGIN STRPOOL[POOLPTR]:=63;POOLPTR:=POOLPTR+1;END;
END ELSE BEGIN STRPOOL[POOLPTR]:=K;POOLPTR:=POOLPTR+1;END;G:=MAKESTRING;
END{:48};{51:}NAMEOFFILE:=POOLNAME;
IF AOPENIN(POOLFILE)THEN BEGIN C:=FALSE;REPEAT{52:}
BEGIN IF EOF(POOLFILE)THEN BEGIN WRITELN(TTY,
'! TEX.POOL has no check sum.');ACLOSE(POOLFILE);INITSTRINGS:=FALSE;
GOTO 10;END;READ(POOLFILE,M,N);IF M='*'THEN{53:}BEGIN A:=0;K:=1;
WHILE TRUE DO BEGIN IF(XORD[N]<48)OR(XORD[N]>57)THEN BEGIN WRITELN(TTY,
'! TEX.POOL check sum doesn''t have nine digits.');ACLOSE(POOLFILE);
INITSTRINGS:=FALSE;GOTO 10;END;A:=10*A+XORD[N]-48;IF K=9 THEN GOTO 30;
K:=K+1;READ(POOLFILE,N);END;
30:IF A<>463829795 THEN BEGIN WRITELN(TTY,
'! TEX.POOL doesn''t match; TANGLE me again.');ACLOSE(POOLFILE);
INITSTRINGS:=FALSE;GOTO 10;END;C:=TRUE;END{:53}
ELSE BEGIN IF(XORD[M]<48)OR(XORD[M]>57)OR(XORD[N]<48)OR(XORD[N]>57)THEN
BEGIN WRITELN(TTY,'! TEX.POOL line doesn''t begin with two digits.');
ACLOSE(POOLFILE);INITSTRINGS:=FALSE;GOTO 10;END;
L:=XORD[M]*10+XORD[N]-48*11;
IF POOLPTR+L+STRINGVACANC>POOLSIZE THEN BEGIN WRITELN(TTY,
'! You have to increase POOLSIZE.');ACLOSE(POOLFILE);INITSTRINGS:=FALSE;
GOTO 10;END;
FOR K:=1 TO L DO BEGIN IF EOLN(POOLFILE)THEN BEGIN WRITELN(TTY,
'! TEX.POOL line too short.');ACLOSE(POOLFILE);INITSTRINGS:=FALSE;
GOTO 10;END;READ(POOLFILE,M);BEGIN STRPOOL[POOLPTR]:=XORD[M];
POOLPTR:=POOLPTR+1;END;END;READLN(POOLFILE);G:=MAKESTRING;END;END{:52};
UNTIL C;ACLOSE(POOLFILE);INITSTRINGS:=TRUE;
END ELSE BEGIN WRITELN(TTY,'! I can''t read TEX.POOL.');
ACLOSE(POOLFILE);INITSTRINGS:=FALSE;GOTO 10;END{:51};10:END;{:47}{65:}
PROCEDURE PRINTTWO(N:INTEGER);
BEGIN PRINTCHAR(48+((ABS(N)DIV 10)MOD 10));PRINTCHAR(48+(ABS(N)MOD 10));
END;{:65}{66:}PROCEDURE PRINTOCTAL(N:INTEGER);VAR K:0..22;BEGIN K:=0;
PRINTCHAR(39);REPEAT DIG[K]:=N MOD 8;N:=N DIV 8;K:=K+1;UNTIL N=0;
PRINTDIGS(K);END;{:66}{67:}PROCEDURE PRINTASCII(C:INTEGER);
BEGIN IF(C>=0)AND(C<=127)THEN PRINT(C)ELSE BEGIN PRINTCHAR(91);
IF C<0 THEN PRINTINT(C)ELSE PRINTOCTAL(C);PRINTCHAR(93);END;END;{:67}
{68:}PROCEDURE PRINTROMANIN(N:NONNEGATIVEI);LABEL 10;
VAR J,K:POOLPOINTER;U,V:NONNEGATIVEI;BEGIN J:=STRSTART[132];V:=1000;
WHILE TRUE DO BEGIN WHILE N>=V DO BEGIN PRINTCHAR(STRPOOL[J]);N:=N-V;
END;IF N=0 THEN GOTO 10;K:=J+2;U:=V DIV(STRPOOL[K-1]-48);
IF STRPOOL[K-1]=50 THEN BEGIN K:=K+2;U:=U DIV(STRPOOL[K-1]-48);END;
IF N+U>=V THEN BEGIN PRINTCHAR(STRPOOL[K]);N:=N+U;END ELSE BEGIN J:=J+2;
V:=V DIV(STRPOOL[J-1]-48);END;END;10:END;{:68}{69:}
PROCEDURE PRINTCURRENT;VAR J:POOLPOINTER;BEGIN J:=STRSTART[STRPTR];
WHILE J<POOLPTR DO BEGIN PRINTCHAR(STRPOOL[J]);J:=J+1;END;END;{:69}{70:}
PROCEDURE TERMINPUT;VAR K:0..BUFSIZE;BEGIN BREAK(TTY);BUFFER[FIRST]:=0;
IF NOT INPUTLN(TTY)THEN FATALERROR(133);TERMOFFSET:=0;
SELECTOR:=SELECTOR-1;
IF LAST<>FIRST THEN FOR K:=FIRST TO LAST-1 DO PRINT(BUFFER[K]);PRINTLN;
SELECTOR:=SELECTOR+1;END;{:70}{89:}PROCEDURE INTERROR(N:INTEGER);
BEGIN PRINT(152);PRINTINT(N);PRINTCHAR(41);ERROR;END;{:89}{90:}
PROCEDURE NORMALIZESEL;
BEGIN IF JOBNAME>0 THEN SELECTOR:=19 ELSE SELECTOR:=17;
IF INTERACTION=0 THEN SELECTOR:=SELECTOR-1;
IF JOBNAME=0 THEN OPENLOGFILE;END;{:90}{96:}PROCEDURE PAUSEFORINST;
BEGIN IF OKTOINTERRUP THEN BEGIN INTERACTION:=3;
IF(SELECTOR=18)OR(SELECTOR=16)THEN SELECTOR:=SELECTOR+1;PRINTNL(162);
BEGIN HELPPTR:=3;HELPLINE[2]:=163;HELPLINE[1]:=164;HELPLINE[0]:=165;END;
DELETIONSALL:=FALSE;ERROR;DELETIONSALL:=TRUE;INTERRUPT:=0;END;END;{:96}
{98:}FUNCTION HALF(X:INTEGER):INTEGER;
BEGIN IF ODD(X)THEN HALF:=(X+1)DIV 2 ELSE HALF:=X DIV 2;END;{:98}{100:}
FUNCTION ROUNDDECIMAL(K:SMALLNUMBER):SCALED;VAR A:INTEGER;BEGIN A:=0;
WHILE K>0 DO BEGIN K:=K-1;A:=(A+DIG[K]*131072)DIV 10;END;
ROUNDDECIMAL:=(A+1)DIV 2;END;{:100}{101:}
PROCEDURE PRINTSCALED(S:SCALED);BEGIN IF S<0 THEN BEGIN PRINTCHAR(45);
S:=-S;END;PRINTINT(S DIV 65536);S:=((S MOD 65536)*3125+1024)DIV 2048;
PRINTCHAR(46);REPEAT PRINTCHAR(48+(S DIV 10000));S:=10*(S MOD 10000);
UNTIL S=0;END;{:101}{103:}FUNCTION NXPLUSY(N:INTEGER;X,Y:SCALED):SCALED;
BEGIN IF N<0 THEN BEGIN X:=-X;N:=-N;END;
IF N=0 THEN NXPLUSY:=Y ELSE IF((X<=(1073741823-Y)DIV N)AND(-X<=(
1073741823+Y)DIV N))THEN NXPLUSY:=N*X+Y ELSE BEGIN ARITHERROR:=TRUE;
NXPLUSY:=0;END;END;{:103}{104:}FUNCTION XOVERN(X:SCALED;
N:INTEGER):SCALED;VAR NEGATE:BOOLEAN;BEGIN NEGATE:=FALSE;
IF N=0 THEN BEGIN ARITHERROR:=TRUE;XOVERN:=0;REMAINDER:=X;
END ELSE BEGIN IF N<0 THEN BEGIN X:=-X;N:=-N;NEGATE:=TRUE;END;
IF X>=0 THEN BEGIN XOVERN:=X DIV N;REMAINDER:=X MOD N;
END ELSE BEGIN XOVERN:=-((-X)DIV N);REMAINDER:=-((-X)MOD N);END;END;
IF NEGATE THEN REMAINDER:=-REMAINDER;END;{:104}{105:}
FUNCTION XNOVERD(X:SCALED;N,D:INTEGER):SCALED;VAR POSITIVE:BOOLEAN;
T,U,V:NONNEGATIVEI;BEGIN IF X>=0 THEN POSITIVE:=TRUE ELSE BEGIN X:=-X;
POSITIVE:=FALSE;END;T:=(X MOD 32768)*N;U:=(X DIV 32768)*N+(T DIV 32768);
V:=(U MOD D)*32768+(T MOD 32768);
IF U DIV D>=32768 THEN ARITHERROR:=TRUE ELSE U:=32768*(U DIV D)+(V DIV D
);IF POSITIVE THEN BEGIN XNOVERD:=U;REMAINDER:=V MOD D;
END ELSE BEGIN XNOVERD:=-U;REMAINDER:=-(V MOD D);END;END;{:105}{106:}
FUNCTION BADNESS(T,S:SCALED):HALFWORD;VAR R:INTEGER;
BEGIN IF T=0 THEN BADNESS:=0 ELSE IF S<=0 THEN BADNESS:=10000 ELSE BEGIN
IF T<=7230584 THEN R:=(T*297)DIV S ELSE IF S>=1663497 THEN R:=T DIV(S
DIV 297)ELSE R:=T;
IF R>1290 THEN BADNESS:=10000 ELSE BADNESS:=(R*R*R+131072)DIV 262144;
END;END;{:106}{112:}{PROCEDURE PRINTMEMORYW(W:MEMORYWORD);
BEGIN PRINTINT(W.INT);PRINTCHAR(32);PRINTSCALED(W.INT);PRINTCHAR(32);
PRINTSCALED(ROUND(65536*W.GR));PRINTLN;PRINTINT(W.HH.LH);PRINTCHAR(61);
PRINTINT(W.HH.B0);PRINTCHAR(58);PRINTINT(W.HH.B1);PRINTCHAR(59);
PRINTINT(W.HH.RH);PRINTCHAR(32);PRINTINT(W.QQQQ.B0);PRINTCHAR(58);
PRINTINT(W.QQQQ.B1);PRINTCHAR(58);PRINTINT(W.QQQQ.B2);PRINTCHAR(58);
PRINTINT(W.QQQQ.B3);END;}{:112}{117:}{277:}
PROCEDURE SHOWTOKENLIS(P,Q:INTEGER;L:INTEGER);LABEL 10;VAR M,C:INTEGER;
MATCHCHR:ASCIICODE;N:ASCIICODE;BEGIN MATCHCHR:=35;N:=48;TALLY:=0;
WHILE(P<>0)AND(TALLY<L)DO BEGIN IF P=Q THEN{304:}
BEGIN FIRSTCOUNT:=TALLY;TRICKCOUNT:=TALLY+1+ERRORLINE-HALFERRORLIN;
IF TRICKCOUNT<ERRORLINE THEN TRICKCOUNT:=ERRORLINE;END{:304};{278:}
IF(P<25000)OR(P>MEMEND)THEN BEGIN PRINTESC(177);GOTO 10;END;
IF MEM[P].HH.LH>=4096 THEN PRINTCS(MEM[P].HH.LH-4096)ELSE BEGIN M:=MEM[P
].HH.LH DIV 256;C:=MEM[P].HH.LH MOD 256;
IF(MEM[P].HH.LH<0)OR(C>127)THEN PRINTESC(376)ELSE{279:}
CASE M OF 2,3,4,7,8,10,11,12:PRINT(C);
1:BEGIN IF(MEM[P].HH.RH>=25000)AND(MEM[P].HH.RH<=MEMEND)THEN IF MEM[MEM[
P].HH.RH].HH.LH DIV 256=14 THEN PRINT(MATCHCHR);PRINT(C);END;
6:BEGIN PRINT(C);PRINT(C);END;5:BEGIN PRINT(MATCHCHR);
IF C<=9 THEN PRINTCHAR(C+48)ELSE BEGIN PRINTCHAR(33);GOTO 10;END;END;
13:BEGIN MATCHCHR:=C;PRINT(C);N:=N+1;PRINTCHAR(N);IF N>57 THEN GOTO 10;
END;14:PRINT(377);OTHERS:PRINTESC(376)END{:279};END{:278};
P:=MEM[P].HH.RH;END;IF P<>0 THEN PRINTESC(375);10:END;{:277}{290:}
PROCEDURE RUNAWAY;VAR P:HALFWORD;
BEGIN IF SCANNERSTATU>1 THEN BEGIN PRINTNL(393);
CASE SCANNERSTATU OF 2:BEGIN PRINT(394);P:=DEFREF;END;
3:BEGIN PRINT(395);P:=25003;END;4:BEGIN PRINT(396);P:=25004;END;END;
PRINTLN;SHOWTOKENLIS(MEM[P].HH.RH,0,ERRORLINE-10);END;END;{:290}{:117}
{118:}FUNCTION GETAVAIL:HALFWORD;VAR P:HALFWORD;BEGIN P:=AVAIL;
IF P<>0 THEN AVAIL:=MEM[AVAIL].HH.RH ELSE IF MEMEND<MEMMAX THEN BEGIN
MEMEND:=MEMEND+1;P:=MEMEND;END ELSE BEGIN RUNAWAY;
OVERFLOW(166,MEMMAX-0);END;MEM[P].HH.RH:=0;DYNUSED:=DYNUSED+1;
GETAVAIL:=P;END;{:118}{121:}PROCEDURE FLUSHLIST(P:HALFWORD);
VAR Q:HALFWORD;BEGIN WHILE P<>0 DO BEGIN Q:=MEM[P].HH.RH;
BEGIN MEM[P].HH.RH:=AVAIL;AVAIL:=P;DYNUSED:=DYNUSED-1;END;P:=Q;END;END;
{:121}{123:}FUNCTION GETNODE(S:INTEGER):HALFWORD;LABEL 40,10;
VAR P:HALFWORD;Q:HALFWORD;R:INTEGER;BEGIN P:=ROVER;REPEAT{125:}
Q:=P+MEM[P].HH.LH;
WHILE(MEM[Q].HH.RH=262143)DO BEGIN IF Q=ROVER THEN ROVER:=MEM[Q+1].HH.RH
;MEM[MEM[Q+1].HH.RH+1].HH.LH:=MEM[Q+1].HH.LH;
MEM[MEM[Q+1].HH.LH+1].HH.RH:=MEM[Q+1].HH.RH;Q:=Q+MEM[Q].HH.LH;END;
R:=Q-S;IF R>P+1 THEN{126:}BEGIN MEM[P].HH.LH:=R-P;ROVER:=P;GOTO 40;
END{:126};
IF(R=P)AND((MEM[P+1].HH.RH<>ROVER)OR(MEM[P+1].HH.LH<>ROVER))THEN{127:}
BEGIN IF P=ROVER THEN ROVER:=MEM[P+1].HH.RH;
MEM[MEM[P+1].HH.RH+1].HH.LH:=MEM[P+1].HH.LH;
MEM[MEM[P+1].HH.LH+1].HH.RH:=MEM[P+1].HH.RH;ROVER:=MEM[P+1].HH.RH;
GOTO 40;END{:127};MEM[P].HH.LH:=Q-P{:125};P:=MEM[P+1].HH.RH;
UNTIL P=ROVER;IF S=1073741824 THEN BEGIN GETNODE:=262143;GOTO 10;END;
OVERFLOW(167,25000);40:MEM[R].HH.RH:=0;VARUSED:=VARUSED+S;
IF VARUSED>MAXVARUSED THEN MAXVARUSED:=VARUSED;GETNODE:=R;10:END;{:123}
{128:}PROCEDURE FREENODE(P:HALFWORD;S:HALFWORD);VAR Q:HALFWORD;
BEGIN IF{160:}(P<20)OR(P>=25000){:160}THEN CONFUSION(168);
MEM[P].HH.LH:=S;MEM[P].HH.RH:=262143;Q:=MEM[ROVER+1].HH.LH;
MEM[P+1].HH.LH:=Q;MEM[P+1].HH.RH:=ROVER;MEM[ROVER+1].HH.LH:=P;
MEM[Q+1].HH.RH:=P;VARUSED:=VARUSED-S;END;{:128}{129:}
PROCEDURE SORTAVAIL;VAR P,Q,R:HALFWORD;OLDROVER:HALFWORD;
BEGIN P:=GETNODE(1073741824);P:=MEM[ROVER+1].HH.RH;
MEM[ROVER+1].HH.RH:=262143;OLDROVER:=ROVER;WHILE P<>OLDROVER DO{130:}
IF P<ROVER THEN BEGIN Q:=P;P:=MEM[Q+1].HH.RH;MEM[Q+1].HH.RH:=ROVER;
ROVER:=Q;END ELSE BEGIN Q:=ROVER;
WHILE MEM[Q+1].HH.RH<P DO Q:=MEM[Q+1].HH.RH;R:=MEM[P+1].HH.RH;
MEM[P+1].HH.RH:=MEM[Q+1].HH.RH;MEM[Q+1].HH.RH:=P;P:=R;END{:130};
P:=ROVER;
WHILE MEM[P+1].HH.RH<>262143 DO BEGIN MEM[MEM[P+1].HH.RH+1].HH.LH:=P;
P:=MEM[P+1].HH.RH;END;MEM[P+1].HH.RH:=ROVER;MEM[ROVER+1].HH.LH:=P;END;
{:129}{134:}FUNCTION NEWNULLBOX:HALFWORD;VAR P:HALFWORD;
BEGIN P:=GETNODE(7);MEM[P].HH.B0:=0;MEM[P].HH.B1:=0;MEM[P+1].INT:=0;
MEM[P+2].INT:=0;MEM[P+3].INT:=0;MEM[P+4].INT:=0;MEM[P+5].HH.RH:=0;
MEM[P+5].HH.B0:=0;MEM[P+5].HH.B1:=0;MEM[P+6].GR:=0.0;NEWNULLBOX:=P;END;
{:134}{137:}FUNCTION NEWRULE:HALFWORD;VAR P:HALFWORD;
BEGIN P:=GETNODE(4);MEM[P].HH.B0:=2;MEM[P].HH.B1:=0;
MEM[P+1].INT:=-1073741824;MEM[P+2].INT:=-1073741824;
MEM[P+3].INT:=-1073741824;NEWRULE:=P;END;{:137}{142:}
FUNCTION NEWLIGATURE(F,C:QUARTERWORD;Q:HALFWORD):HALFWORD;
VAR P:HALFWORD;BEGIN P:=GETNODE(2);MEM[P].HH.B0:=6;MEM[P].HH.B1:=0;
MEM[P+1].HH.B0:=F;MEM[P+1].HH.B1:=C;MEM[P+1].HH.RH:=Q;NEWLIGATURE:=P;
END;{:142}{143:}FUNCTION NEWDISC:HALFWORD;VAR P:HALFWORD;
BEGIN P:=GETNODE(2);MEM[P].HH.B0:=7;MEM[P].HH.B1:=0;MEM[P+1].HH.LH:=0;
MEM[P+1].HH.RH:=0;NEWDISC:=P;END;{:143}{145:}FUNCTION NEWMATH(W:SCALED;
S:SMALLNUMBER):HALFWORD;VAR P:HALFWORD;BEGIN P:=GETNODE(2);
MEM[P].HH.B0:=9;MEM[P].HH.B1:=S;MEM[P+1].INT:=W;NEWMATH:=P;END;{:145}
{149:}FUNCTION NEWSPEC(P:HALFWORD):HALFWORD;VAR Q:HALFWORD;
BEGIN Q:=GETNODE(4);MEM[Q]:=MEM[P];MEM[Q].HH.RH:=0;
MEM[Q+1].INT:=MEM[P+1].INT;MEM[Q+2].INT:=MEM[P+2].INT;
MEM[Q+3].INT:=MEM[P+3].INT;NEWSPEC:=Q;END;{:149}{150:}
FUNCTION NEWPARAMGLUE(N:SMALLNUMBER):HALFWORD;VAR P:HALFWORD;Q:HALFWORD;
BEGIN P:=GETNODE(2);MEM[P].HH.B0:=10;MEM[P].HH.B1:=N+1;
MEM[P+1].HH.RH:=0;Q:={220:}EQTB[2369+N].HH.RH{:220};MEM[P+1].HH.LH:=Q;
MEM[Q].HH.RH:=MEM[Q].HH.RH+1;NEWPARAMGLUE:=P;END;{:150}{151:}
FUNCTION NEWGLUE(Q:HALFWORD):HALFWORD;VAR P:HALFWORD;
BEGIN P:=GETNODE(2);MEM[P].HH.B0:=10;MEM[P].HH.B1:=0;MEM[P+1].HH.RH:=0;
MEM[P+1].HH.LH:=Q;MEM[Q].HH.RH:=MEM[Q].HH.RH+1;NEWGLUE:=P;END;{:151}
{152:}FUNCTION NEWSKIPPARAM(N:SMALLNUMBER):HALFWORD;VAR P:HALFWORD;
BEGIN TEMPPTR:=NEWSPEC({220:}EQTB[2369+N].HH.RH{:220});
P:=NEWGLUE(TEMPPTR);MEM[TEMPPTR].HH.RH:=0;MEM[P].HH.B1:=N+1;
NEWSKIPPARAM:=P;END;{:152}{154:}FUNCTION NEWKERN(W:SCALED):HALFWORD;
VAR P:HALFWORD;BEGIN P:=GETNODE(2);MEM[P].HH.B0:=11;MEM[P].HH.B1:=0;
MEM[P+1].INT:=W;NEWKERN:=P;END;{:154}{156:}
FUNCTION NEWPENALTY(M:INTEGER):HALFWORD;VAR P:HALFWORD;
BEGIN P:=GETNODE(2);MEM[P].HH.B0:=12;MEM[P].HH.B1:=0;MEM[P+1].INT:=M;
NEWPENALTY:=P;END;{:156}{165:}{PROCEDURE CHECKMEM(PRINTLOCS:BOOLEAN);
LABEL 31,32;VAR P,Q:HALFWORD;CLOBBERED:BOOLEAN;
BEGIN FOR P:=0 TO MEMEND DO FREE[P]:=FALSE;[166:]P:=AVAIL;Q:=0;
CLOBBERED:=FALSE;
WHILE P<>0 DO BEGIN IF(P>MEMEND)OR(P<25014)THEN CLOBBERED:=TRUE ELSE IF
FREE[P]THEN CLOBBERED:=TRUE;IF CLOBBERED THEN BEGIN PRINTNL(169);
PRINTINT(Q);GOTO 31;END;FREE[P]:=TRUE;Q:=P;P:=MEM[Q].HH.RH;END;
31:[:166];[167:]P:=ROVER;Q:=0;CLOBBERED:=FALSE;
REPEAT IF(P>=25000)OR(P<20)THEN CLOBBERED:=TRUE ELSE IF(MEM[P+1].HH.RH>=
25000)OR(MEM[P+1].HH.RH<20)THEN CLOBBERED:=TRUE ELSE IF NOT((MEM[P].HH.
RH=262143))OR(MEM[P].HH.LH<2)OR(P+MEM[P].HH.LH>25000)OR(MEM[MEM[P+1].HH.
RH+1].HH.LH<>P)THEN CLOBBERED:=TRUE;
IF CLOBBERED THEN BEGIN PRINTNL(170);PRINTINT(Q);GOTO 32;END;
FOR Q:=P TO P+MEM[P].HH.LH-1 DO BEGIN IF FREE[Q]THEN BEGIN PRINTNL(171);
PRINTINT(Q);GOTO 32;END;FREE[Q]:=TRUE;END;Q:=P;P:=MEM[P+1].HH.RH;
UNTIL P=ROVER;32:[:167];[168:]P:=0;
WHILE P<=25000 DO BEGIN IF(MEM[P].HH.RH=262143)THEN BEGIN PRINTNL(172);
PRINTINT(P);END;WHILE(P<=25000)AND NOT FREE[P]DO P:=P+1;
WHILE(P<=25000)AND FREE[P]DO P:=P+1;END[:168];
IF PRINTLOCS THEN[169:]BEGIN PRINTNL(173);
FOR P:=0 TO MEMEND DO IF NOT FREE[P]AND((P>WASMEMEND)OR WASFREE[P])THEN
BEGIN PRINTCHAR(32);PRINTINT(P);END;END[:169];
FOR P:=0 TO MEMEND DO WASFREE[P]:=FREE[P];WASMEMEND:=MEMEND;END;}{:165}
{170:}{PROCEDURE SEARCHMEM(P:HALFWORD);VAR Q:INTEGER;
BEGIN FOR Q:=0 TO MEMEND DO BEGIN IF MEM[Q].HH.RH=P THEN BEGIN PRINTNL(
174);PRINTINT(Q);PRINTCHAR(41);END;
IF MEM[Q].HH.LH=P THEN BEGIN PRINTNL(175);PRINTINT(Q);PRINTCHAR(41);END;
END;
[242:]FOR Q:=1 TO 3159 DO BEGIN IF EQTB[Q].HH.RH=P THEN BEGIN PRINTNL(
326);PRINTINT(Q);PRINTCHAR(41);END;END[:242];
[270:]IF SAVEPTR>0 THEN FOR Q:=0 TO SAVEPTR-1 DO BEGIN IF SAVESTACK[Q].
HH.RH=P THEN BEGIN PRINTNL(367);PRINTINT(Q);PRINTCHAR(41);END;END[:270];
[893:]FOR Q:=0 TO 307 DO BEGIN IF HYPHLIST[Q]=P THEN BEGIN PRINTNL(757);
PRINTINT(Q);PRINTCHAR(41);END;END[:893];END;}{:170}{172:}
PROCEDURE SHORTDISPLAY(P:INTEGER);VAR N:INTEGER;
BEGIN WHILE P>0 DO BEGIN IF(P>25000)THEN BEGIN IF P<=MEMEND THEN BEGIN
IF MEM[P].HH.B0<>FONTINSHORTD THEN BEGIN IF(MEM[P].HH.B0<0)OR(MEM[P].HH.
B0>FONTMAX)THEN PRINTCHAR(42)ELSE SPRINTCS(FONTIDENT[MEM[P].HH.B0]);
PRINTCHAR(32);FONTINSHORTD:=MEM[P].HH.B0;END;PRINTASCII(MEM[P].HH.B1);
END;END ELSE{173:}CASE MEM[P].HH.B0 OF 0,1,3,8,4,5,13:PRINT(176);
2:PRINTCHAR(124);10:IF MEM[P+1].HH.LH<>0 THEN PRINTCHAR(32);
9:PRINTCHAR(36);6:SHORTDISPLAY(MEM[P+1].HH.RH);
7:BEGIN SHORTDISPLAY(MEM[P+1].HH.LH);SHORTDISPLAY(MEM[P+1].HH.RH);
N:=MEM[P].HH.B1;
WHILE N>0 DO BEGIN IF MEM[P].HH.RH<>0 THEN P:=MEM[P].HH.RH;N:=N-1;END;
END;OTHERS:END{:173};P:=MEM[P].HH.RH;END;END;{:172}{174:}
PROCEDURE PRINTFONTAND(P:INTEGER);
BEGIN IF P>MEMEND THEN PRINTESC(177)ELSE BEGIN IF(MEM[P].HH.B0<0)OR(MEM[
P].HH.B0>FONTMAX)THEN PRINTCHAR(42)ELSE SPRINTCS(FONTIDENT[MEM[P].HH.B0]
);PRINTCHAR(32);PRINTASCII(MEM[P].HH.B1);END;END;
PROCEDURE PRINTMARK(P:INTEGER);BEGIN PRINTCHAR(123);
IF(P<25000)OR(P>MEMEND)THEN PRINTESC(177)ELSE SHOWTOKENLIS(MEM[P].HH.RH,
0,MAXPRINTLINE-10);PRINTCHAR(125);END;PROCEDURE PRINTRULEDIM(D:SCALED);
BEGIN IF(D=-1073741824)THEN PRINTCHAR(42)ELSE PRINTSCALED(D);END;{:174}
{175:}PROCEDURE PRINTGLUE(D:SCALED;ORDER:INTEGER;S:STRNUMBER);
BEGIN PRINTSCALED(D);
IF(ORDER<0)OR(ORDER>3)THEN PRINT(178)ELSE IF ORDER>0 THEN BEGIN PRINT(
179);WHILE ORDER>1 DO BEGIN PRINTCHAR(108);ORDER:=ORDER-1;END;
END ELSE IF S<>0 THEN PRINT(S);END;{:175}{176:}
PROCEDURE PRINTSPEC(P:HALFWORD;S:STRNUMBER);
BEGIN IF(P<0)OR(P>=25000)THEN PRINTCHAR(42)ELSE BEGIN PRINTSCALED(MEM[P
+1].INT);IF S<>0 THEN PRINT(S);IF MEM[P+2].INT<>0 THEN BEGIN PRINT(180);
PRINTGLUE(MEM[P+2].INT,MEM[P].HH.B0,S);END;
IF MEM[P+3].INT<>0 THEN BEGIN PRINT(181);
PRINTGLUE(MEM[P+3].INT,MEM[P].HH.B1,S);END;END;END;{:176}{177:}{659:}
PROCEDURE PRINTFAMANDC(P:HALFWORD);BEGIN PRINTESC(337);
PRINTINT(MEM[P].HH.B0);PRINTCHAR(32);PRINTASCII(MEM[P].HH.B1);END;
PROCEDURE PRINTDELIMIT(P:HALFWORD);VAR A:INTEGER;
BEGIN A:=MEM[P].QQQQ.B0*256+MEM[P].QQQQ.B1;
A:=A*4096+MEM[P].QQQQ.B2*256+MEM[P].QQQQ.B3;
IF A<0 THEN PRINTINT(A)ELSE PRINTOCTAL(A);END;{:659}{660:}
PROCEDURE SHOWINFO;FORWARD;PROCEDURE PRINTSUBSIDI(P:HALFWORD;
C:ASCIICODE);
BEGIN IF(POOLPTR-STRSTART[STRPTR])>=DEPTHTHRESHO THEN BEGIN IF MEM[P].HH
.RH<>0 THEN PRINT(182);END ELSE BEGIN BEGIN STRPOOL[POOLPTR]:=C;
POOLPTR:=POOLPTR+1;END;TEMPPTR:=P;CASE MEM[P].HH.RH OF 1:BEGIN PRINTLN;
PRINTCURRENT;PRINTFAMANDC(P);END;2:SHOWINFO;
3:IF MEM[P].HH.LH=0 THEN BEGIN PRINTLN;PRINTCURRENT;PRINT(679);
END ELSE SHOWINFO;OTHERS:END;POOLPTR:=POOLPTR-1;END;END;{:660}{662:}
PROCEDURE PRINTSTYLE(C:INTEGER);BEGIN CASE C DIV 2 OF 0:PRINTESC(680);
1:PRINTESC(681);2:PRINTESC(682);3:PRINTESC(683);OTHERS:PRINT(684)END;
END;{:662}{221:}PROCEDURE PRINTSKIPPAR(N:INTEGER);
BEGIN CASE N OF 0:PRINTESC(239);1:PRINTESC(240);2:PRINTESC(241);
3:PRINTESC(242);4:PRINTESC(243);5:PRINTESC(244);6:PRINTESC(245);
7:PRINTESC(246);8:PRINTESC(247);9:PRINTESC(248);10:PRINTESC(249);
11:PRINTESC(250);12:PRINTESC(251);13:PRINTESC(252);14:PRINTESC(253);
15:PRINTESC(254);16:PRINTESC(255);OTHERS:PRINT(256)END;END;{:221}{:177}
{180:}PROCEDURE SHOWNODELIST(P:HALFWORD);LABEL 10;VAR N:INTEGER;
BEGIN IF(POOLPTR-STRSTART[STRPTR])>DEPTHTHRESHO THEN BEGIN IF P>0 THEN
PRINT(182);GOTO 10;END;N:=0;WHILE P>0 DO BEGIN PRINTLN;PRINTCURRENT;
IF P>MEMEND THEN BEGIN PRINT(183);GOTO 10;END;N:=N+1;
IF N>BREADTHMAX THEN BEGIN PRINT(184);GOTO 10;END;{181:}
IF(P>25000)THEN PRINTFONTAND(P)ELSE CASE MEM[P].HH.B0 OF 0,1,13:{182:}
BEGIN IF MEM[P].HH.B0=0 THEN PRINTESC(104)ELSE IF MEM[P].HH.B0=1 THEN
PRINTESC(118)ELSE PRINTESC(186);PRINT(187);PRINTSCALED(MEM[P+3].INT);
PRINTCHAR(43);PRINTSCALED(MEM[P+2].INT);PRINT(188);
PRINTSCALED(MEM[P+1].INT);IF MEM[P].HH.B0=13 THEN{183:}
BEGIN IF MEM[P].HH.B1<>0 THEN BEGIN PRINT(152);PRINTINT(MEM[P].HH.B1+1);
PRINT(190);END;IF MEM[P+6].INT<>0 THEN BEGIN PRINT(191);
PRINTGLUE(MEM[P+6].INT,MEM[P+5].HH.B1,0);END;
IF MEM[P+4].INT<>0 THEN BEGIN PRINT(192);
PRINTGLUE(MEM[P+4].INT,MEM[P+5].HH.B0,0);END;END{:183}ELSE BEGIN{184:}
IF(MEM[P+6].GR<>0.0)AND(MEM[P+5].HH.B0<>0)THEN BEGIN PRINT(193);
IF MEM[P+5].HH.B0=2 THEN PRINT(194);
IF ABS(MEM[P+6].INT)<1048576 THEN PRINT(195)ELSE IF ABS(MEM[P+6].GR)>
20000.0 THEN BEGIN IF MEM[P+6].GR>0.0 THEN PRINTCHAR(62)ELSE PRINT(196);
PRINTGLUE(20000*65536,MEM[P+5].HH.B1,0);
END ELSE PRINTGLUE(ROUND(MEM[P+6].GR*65536),MEM[P+5].HH.B1,0);END{:184};
IF MEM[P+4].INT<>0 THEN BEGIN PRINT(189);PRINTSCALED(MEM[P+4].INT);END;
END;BEGIN BEGIN STRPOOL[POOLPTR]:=46;POOLPTR:=POOLPTR+1;END;
SHOWNODELIST(MEM[P+5].HH.RH);POOLPTR:=POOLPTR-1;END;END{:182};2:{185:}
BEGIN PRINTESC(197);PRINTRULEDIM(MEM[P+3].INT);PRINTCHAR(43);
PRINTRULEDIM(MEM[P+2].INT);PRINT(188);PRINTRULEDIM(MEM[P+1].INT);
END{:185};3:{186:}BEGIN PRINTESC(198);PRINTINT(MEM[P].HH.B1);PRINT(199);
PRINTSCALED(MEM[P+3].INT);PRINT(200);PRINTSPEC(MEM[P+4].HH.RH,0);
PRINTCHAR(44);PRINTSCALED(MEM[P+2].INT);PRINT(201);
PRINTINT(MEM[P+1].INT);BEGIN BEGIN STRPOOL[POOLPTR]:=46;
POOLPTR:=POOLPTR+1;END;SHOWNODELIST(MEM[P+4].HH.LH);POOLPTR:=POOLPTR-1;
END;END{:186};8:{1307:}CASE MEM[P].HH.B1 OF 0:BEGIN PRINTESC(1120);
PRINTINT(MEM[P+1].HH.LH);PRINTCHAR(61);
PRINTFILENAM(MEM[P+1].HH.RH,MEM[P+2].HH.LH,MEM[P+2].HH.RH);END;
1:BEGIN PRINTESC(1121);PRINTINT(MEM[P+1].HH.LH);
PRINTMARK(MEM[P+1].HH.RH);END;2:BEGIN PRINTESC(1122);
PRINTINT(MEM[P+1].HH.LH);END;3:BEGIN PRINTESC(1123);
PRINTMARK(MEM[P+1].HH.RH);END;OTHERS:PRINT(1127)END{:1307};10:{187:}
IF MEM[P].HH.B1>=100 THEN{188:}BEGIN PRINTCHAR(92);
IF MEM[P].HH.B1=101 THEN PRINTCHAR(99)ELSE IF MEM[P].HH.B1=102 THEN
PRINTCHAR(120);PRINT(206);PRINTSPEC(MEM[P+1].HH.LH,0);
BEGIN BEGIN STRPOOL[POOLPTR]:=46;POOLPTR:=POOLPTR+1;END;
SHOWNODELIST(MEM[P+1].HH.RH);POOLPTR:=POOLPTR-1;END;END{:188}
ELSE BEGIN PRINTESC(202);IF MEM[P].HH.B1<>0 THEN BEGIN PRINTCHAR(40);
IF MEM[P].HH.B1<98 THEN PRINTSKIPPAR(MEM[P].HH.B1-1)ELSE IF MEM[P].HH.B1
=98 THEN PRINTESC(203)ELSE PRINTESC(204);PRINTCHAR(41);END;
IF MEM[P].HH.B1<>98 THEN BEGIN PRINTCHAR(32);
IF MEM[P].HH.B1<98 THEN PRINTSPEC(MEM[P+1].HH.LH,0)ELSE PRINTSPEC(MEM[P
+1].HH.LH,205);END;END{:187};11:{189:}
IF MEM[P].HH.B1<=1 THEN BEGIN PRINTESC(207);
IF MEM[P].HH.B1=1 THEN PRINTCHAR(32);PRINTSCALED(MEM[P+1].INT);
END ELSE BEGIN PRINTESC(208);PRINTSCALED(MEM[P+1].INT);PRINT(205);
END{:189};9:{190:}BEGIN PRINTESC(209);
IF MEM[P].HH.B1=0 THEN PRINT(210)ELSE PRINT(211);
IF MEM[P+1].INT<>0 THEN BEGIN PRINT(212);PRINTSCALED(MEM[P+1].INT);END;
END{:190};6:{191:}BEGIN PRINTFONTAND(P+1);PRINT(213);
FONTINSHORTD:=MEM[P+1].HH.B0;SHORTDISPLAY(MEM[P+1].HH.RH);PRINTCHAR(41);
END{:191};12:{192:}BEGIN PRINTESC(214);PRINTINT(MEM[P+1].INT);END{:192};
7:{193:}BEGIN PRINTESC(215);IF MEM[P].HH.B1>0 THEN BEGIN PRINT(216);
PRINTINT(MEM[P].HH.B1);END;BEGIN BEGIN STRPOOL[POOLPTR]:=46;
POOLPTR:=POOLPTR+1;END;SHOWNODELIST(MEM[P+1].HH.LH);POOLPTR:=POOLPTR-1;
END;BEGIN STRPOOL[POOLPTR]:=124;POOLPTR:=POOLPTR+1;END;
SHOWNODELIST(MEM[P+1].HH.RH);POOLPTR:=POOLPTR-1;END{:193};4:{194:}
BEGIN PRINTESC(217);PRINTMARK(MEM[P+1].INT);END{:194};5:{195:}
BEGIN PRINTESC(218);BEGIN BEGIN STRPOOL[POOLPTR]:=46;POOLPTR:=POOLPTR+1;
END;SHOWNODELIST(MEM[P+1].INT);POOLPTR:=POOLPTR-1;END;END{:195};{658:}
14:PRINTSTYLE(MEM[P].HH.B1);15:{663:}BEGIN PRINTESC(349);
BEGIN STRPOOL[POOLPTR]:=68;POOLPTR:=POOLPTR+1;END;
SHOWNODELIST(MEM[P+1].HH.LH);POOLPTR:=POOLPTR-1;
BEGIN STRPOOL[POOLPTR]:=84;POOLPTR:=POOLPTR+1;END;
SHOWNODELIST(MEM[P+1].HH.RH);POOLPTR:=POOLPTR-1;
BEGIN STRPOOL[POOLPTR]:=83;POOLPTR:=POOLPTR+1;END;
SHOWNODELIST(MEM[P+2].HH.LH);POOLPTR:=POOLPTR-1;
BEGIN STRPOOL[POOLPTR]:=115;POOLPTR:=POOLPTR+1;END;
SHOWNODELIST(MEM[P+2].HH.RH);POOLPTR:=POOLPTR-1;END{:663};
16,17,18,19,20,21,22,23,24,27,26,29,28,30,31:{664:}
BEGIN CASE MEM[P].HH.B0 OF 16:PRINTESC(685);17:PRINTESC(686);
18:PRINTESC(687);19:PRINTESC(688);20:PRINTESC(689);21:PRINTESC(690);
22:PRINTESC(691);23:PRINTESC(692);27:PRINTESC(693);26:PRINTESC(694);
29:PRINTESC(362);24:BEGIN PRINTESC(355);PRINTDELIMIT(P+4);END;
28:BEGIN PRINTESC(331);PRINTFAMANDC(P+4);END;30:BEGIN PRINTESC(695);
PRINTDELIMIT(P+1);END;31:BEGIN PRINTESC(696);PRINTDELIMIT(P+1);END;END;
IF MEM[P].HH.B1<>0 THEN IF MEM[P].HH.B1=1 THEN PRINTESC(697)ELSE
PRINTESC(698);IF MEM[P].HH.B0<30 THEN PRINTSUBSIDI(P+1,46);
PRINTSUBSIDI(P+2,40);PRINTSUBSIDI(P+3,91);END{:664};25:{665:}
BEGIN PRINTESC(699);
IF MEM[P+1].INT=1073741824 THEN PRINT(700)ELSE PRINTSCALED(MEM[P+1].INT)
;
IF(MEM[P+4].QQQQ.B0<>0)OR(MEM[P+4].QQQQ.B1<>0)OR(MEM[P+4].QQQQ.B2<>0)OR(
MEM[P+4].QQQQ.B3<>0)THEN BEGIN PRINT(701);PRINTDELIMIT(P+4);END;
IF(MEM[P+5].QQQQ.B0<>0)OR(MEM[P+5].QQQQ.B1<>0)OR(MEM[P+5].QQQQ.B2<>0)OR(
MEM[P+5].QQQQ.B3<>0)THEN BEGIN PRINT(702);PRINTDELIMIT(P+5);END;
PRINTSUBSIDI(P+2,92);PRINTSUBSIDI(P+3,47);END{:665};{:658}
OTHERS:PRINT(185)END{:181};P:=MEM[P].HH.RH;END;10:END;{:180}{196:}
PROCEDURE SHOWBOX(P:HALFWORD);BEGIN{228:}DEPTHTHRESHO:=EQTB[3875].INT;
BREADTHMAX:=EQTB[3874].INT{:228};IF BREADTHMAX<=0 THEN BREADTHMAX:=5;
IF POOLPTR+DEPTHTHRESHO>=POOLSIZE THEN DEPTHTHRESHO:=POOLSIZE-POOLPTR-1;
SHOWNODELIST(P);PRINTLN;END;{:196}{198:}
PROCEDURE DELETETOKENR(P:HALFWORD);
BEGIN IF MEM[P].HH.LH=0 THEN FLUSHLIST(P)ELSE MEM[P].HH.LH:=MEM[P].HH.LH
-1;END;{:198}{199:}PROCEDURE DELETEGLUERE(P:HALFWORD);
BEGIN IF MEM[P].HH.RH=0 THEN FREENODE(P,4)ELSE MEM[P].HH.RH:=MEM[P].HH.
RH-1;END;{:199}{200:}PROCEDURE FLUSHNODELIS(P:HALFWORD);LABEL 30;
VAR Q:HALFWORD;BEGIN WHILE P<>0 DO BEGIN Q:=MEM[P].HH.RH;
IF(P>25000)THEN BEGIN MEM[P].HH.RH:=AVAIL;AVAIL:=P;DYNUSED:=DYNUSED-1;
END ELSE BEGIN CASE MEM[P].HH.B0 OF 0,1,13:BEGIN FLUSHNODELIS(MEM[P+5].
HH.RH);FREENODE(P,7);GOTO 30;END;2:BEGIN FREENODE(P,4);GOTO 30;END;
3:BEGIN FLUSHNODELIS(MEM[P+4].HH.LH);DELETEGLUERE(MEM[P+4].HH.RH);
FREENODE(P,5);GOTO 30;END;8:{1309:}
BEGIN CASE MEM[P].HH.B1 OF 0:FREENODE(P,3);
1,3:BEGIN DELETETOKENR(MEM[P+1].HH.RH);FREENODE(P,2);GOTO 30;END;
2:FREENODE(P,2);OTHERS:CONFUSION(1129)END;GOTO 30;END{:1309};
10:BEGIN BEGIN IF MEM[MEM[P+1].HH.LH].HH.RH=0 THEN FREENODE(MEM[P+1].HH.
LH,4)ELSE MEM[MEM[P+1].HH.LH].HH.RH:=MEM[MEM[P+1].HH.LH].HH.RH-1;END;
IF MEM[P+1].HH.RH<>0 THEN FLUSHNODELIS(MEM[P+1].HH.RH);END;11,9,12:;
6:FLUSHNODELIS(MEM[P+1].HH.RH);4:DELETETOKENR(MEM[P+1].INT);
7:BEGIN FLUSHNODELIS(MEM[P+1].HH.LH);FLUSHNODELIS(MEM[P+1].HH.RH);END;
5:FLUSHNODELIS(MEM[P+1].INT);{666:}14:BEGIN FREENODE(P,3);GOTO 30;END;
15:BEGIN FLUSHNODELIS(MEM[P+1].HH.LH);FLUSHNODELIS(MEM[P+1].HH.RH);
FLUSHNODELIS(MEM[P+2].HH.LH);FLUSHNODELIS(MEM[P+2].HH.RH);FREENODE(P,3);
GOTO 30;END;
16,17,18,19,20,21,22,23,24,27,26,29,28:BEGIN IF MEM[P+1].HH.RH>=2 THEN
FLUSHNODELIS(MEM[P+1].HH.LH);
IF MEM[P+2].HH.RH>=2 THEN FLUSHNODELIS(MEM[P+2].HH.LH);
IF MEM[P+3].HH.RH>=2 THEN FLUSHNODELIS(MEM[P+3].HH.LH);
IF MEM[P].HH.B0=24 THEN FREENODE(P,5)ELSE IF MEM[P].HH.B0=28 THEN
FREENODE(P,5)ELSE FREENODE(P,4);GOTO 30;END;30,31:BEGIN FREENODE(P,4);
GOTO 30;END;25:BEGIN FLUSHNODELIS(MEM[P+2].HH.LH);
FLUSHNODELIS(MEM[P+3].HH.LH);FREENODE(P,6);GOTO 30;END;{:666}
OTHERS:CONFUSION(219)END;FREENODE(P,2);30:END;P:=Q;END;END;{:200}{202:}
FUNCTION COPYNODELIST(P:HALFWORD):HALFWORD;VAR H:HALFWORD;Q:HALFWORD;
R:HALFWORD;WORDS:0..5;BEGIN H:=GETAVAIL;Q:=H;WHILE P<>0 DO BEGIN{203:}
WORDS:=1;IF(P>25000)THEN R:=GETAVAIL ELSE{204:}
CASE MEM[P].HH.B0 OF 0,1,13:BEGIN R:=GETNODE(7);MEM[R+6]:=MEM[P+6];
MEM[R+5]:=MEM[P+5];MEM[R+5].HH.RH:=COPYNODELIST(MEM[P+5].HH.RH);
WORDS:=5;END;2:BEGIN R:=GETNODE(4);WORDS:=4;END;3:BEGIN R:=GETNODE(5);
MEM[R+4]:=MEM[P+4];
MEM[MEM[P+4].HH.RH].HH.RH:=MEM[MEM[P+4].HH.RH].HH.RH+1;
MEM[R+4].HH.LH:=COPYNODELIST(MEM[P+4].HH.LH);WORDS:=4;END;8:{1308:}
CASE MEM[P].HH.B1 OF 0:BEGIN R:=GETNODE(3);WORDS:=3;END;
1,3:BEGIN R:=GETNODE(2);
MEM[MEM[P+1].HH.RH].HH.LH:=MEM[MEM[P+1].HH.RH].HH.LH+1;WORDS:=2;END;
2:BEGIN R:=GETNODE(2);WORDS:=2;END;OTHERS:CONFUSION(1128)END{:1308};
10:BEGIN R:=GETNODE(2);
MEM[MEM[P+1].HH.LH].HH.RH:=MEM[MEM[P+1].HH.LH].HH.RH+1;
MEM[R+1].HH.LH:=MEM[P+1].HH.LH;
MEM[R+1].HH.RH:=COPYNODELIST(MEM[P+1].HH.RH);END;
11,9,12:BEGIN R:=GETNODE(2);WORDS:=2;END;6:BEGIN R:=GETNODE(2);
MEM[R+1]:=MEM[P+1];MEM[R+1].HH.RH:=COPYNODELIST(MEM[P+1].HH.RH);END;
7:BEGIN R:=GETNODE(2);MEM[R+1].HH.LH:=COPYNODELIST(MEM[P+1].HH.LH);
MEM[R+1].HH.RH:=COPYNODELIST(MEM[P+1].HH.RH);END;4:BEGIN R:=GETNODE(2);
MEM[MEM[P+1].INT].HH.LH:=MEM[MEM[P+1].INT].HH.LH+1;WORDS:=2;END;
OTHERS:CONFUSION(220)END{:204};WHILE WORDS>0 DO BEGIN WORDS:=WORDS-1;
MEM[R+WORDS]:=MEM[P+WORDS];END{:203};MEM[Q].HH.RH:=R;Q:=R;
P:=MEM[P].HH.RH;END;MEM[Q].HH.RH:=0;Q:=MEM[H].HH.RH;
BEGIN MEM[H].HH.RH:=AVAIL;AVAIL:=H;DYNUSED:=DYNUSED-1;END;
COPYNODELIST:=Q;END;{:202}{209:}PROCEDURE PRINTMODE(M:INTEGER);
BEGIN IF M>0 THEN CASE M DIV(98)OF 0:PRINT(221);1:PRINT(222);
2:PRINT(223);END ELSE CASE(-M)DIV(98)OF 0:PRINT(224);1:PRINT(225);
2:PRINT(209);END;PRINT(226);END;{:209}{214:}PROCEDURE PUSHNEST;
BEGIN IF NESTPTR>MAXNESTSTACK THEN BEGIN MAXNESTSTACK:=NESTPTR;
IF NESTPTR=NESTSIZE THEN OVERFLOW(227,NESTSIZE);END;
NEST[NESTPTR]:=CURLIST;NESTPTR:=NESTPTR+1;CURLIST.HEADFIELD:=GETAVAIL;
CURLIST.TAILFIELD:=CURLIST.HEADFIELD;CURLIST.PGFIELD:=0;
CURLIST.MLFIELD:=LINE;END;{:214}{215:}PROCEDURE POPNEST;
BEGIN BEGIN MEM[CURLIST.HEADFIELD].HH.RH:=AVAIL;
AVAIL:=CURLIST.HEADFIELD;DYNUSED:=DYNUSED-1;END;NESTPTR:=NESTPTR-1;
CURLIST:=NEST[NESTPTR];END;{:215}{216:}PROCEDURE SHOWACTIVITI;
VAR P:0..NESTSIZE;M:-197..197;A:INTEGER;Q,R:HALFWORD;T:INTEGER;
BEGIN NEST[NESTPTR]:=CURLIST;PRINTNL(228);PRINTLN;
FOR P:=NESTPTR DOWNTO 0 DO BEGIN M:=NEST[P].MODEFIELD;
A:=NEST[P].AUXFIELD;PRINTNL(229);PRINTMODE(M);PRINT(230);
PRINTINT(ABS(NEST[P].MLFIELD));IF NEST[P].MLFIELD<0 THEN PRINT(231);
IF P=0 THEN BEGIN{945:}IF 25002<>PAGETAIL THEN BEGIN PRINTNL(787);
IF OUTPUTACTIVE THEN PRINT(788);SHOWBOX(MEM[25002].HH.RH);
IF PAGECONTENTS>0 THEN BEGIN PRINTNL(789);PRINTSCALED(PAGESOFAR[1]);
IF PAGESOFAR[2]<>0 THEN BEGIN PRINT(180);PRINTSCALED(PAGESOFAR[2]);
PRINT(228);END;IF PAGESOFAR[3]<>0 THEN BEGIN PRINT(180);
PRINTSCALED(PAGESOFAR[3]);PRINT(179);END;
IF PAGESOFAR[4]<>0 THEN BEGIN PRINT(180);PRINTSCALED(PAGESOFAR[4]);
PRINT(790);END;IF PAGESOFAR[5]<>0 THEN BEGIN PRINT(180);
PRINTSCALED(PAGESOFAR[5]);PRINT(791);END;
IF PAGESOFAR[6]<>0 THEN BEGIN PRINT(181);PRINTSCALED(PAGESOFAR[6]);END;
PRINTNL(792);PRINTSCALED(PAGESOFAR[0]);R:=MEM[25000].HH.RH;
WHILE R<>25000 DO BEGIN PRINTLN;PRINTESC(198);T:=MEM[R].HH.B1;
PRINTINT(T);PRINT(793);T:=XOVERN(MEM[R+3].INT,1000)*EQTB[3893+T].INT;
PRINTSCALED(T);IF MEM[R].HH.B0=1 THEN BEGIN Q:=25002;T:=0;
REPEAT Q:=MEM[Q].HH.RH;
IF(MEM[Q].HH.B0=3)AND(MEM[Q].HH.B1=MEM[R].HH.B1)THEN T:=T+1;
UNTIL Q=MEM[R+1].HH.LH;PRINT(794);PRINTINT(T);PRINT(795);END;
R:=MEM[R].HH.RH;END;END;END{:945};
IF MEM[25001].HH.RH<>0 THEN PRINTNL(232);END;
SHOWBOX(MEM[NEST[P].HEADFIELD].HH.RH);
CASE ABS(M)DIV(98)OF 0:BEGIN PRINTNL(233);
IF A<=-65536000 THEN PRINT(234)ELSE PRINTSCALED(A);
IF NEST[P].PGFIELD<>0 THEN BEGIN PRINT(235);PRINTINT(NEST[P].PGFIELD);
PRINT(236);IF NEST[P].PGFIELD<>1 THEN PRINTCHAR(115);END;END;
1:BEGIN PRINTNL(237);PRINTINT(A);END;2:IF A<>0 THEN BEGIN PRINT(238);
SHOWBOX(A);END;END;END;END;{:216}{229:}PROCEDURE PRINTPARAM(N:INTEGER);
BEGIN CASE N OF 0:PRINTESC(262);1:PRINTESC(263);2:PRINTESC(264);
3:PRINTESC(265);4:PRINTESC(266);5:PRINTESC(267);6:PRINTESC(268);
7:PRINTESC(269);8:PRINTESC(270);9:PRINTESC(271);10:PRINTESC(272);
11:PRINTESC(273);12:PRINTESC(274);13:PRINTESC(275);14:PRINTESC(276);
15:PRINTESC(277);16:PRINTESC(278);17:PRINTESC(279);18:PRINTESC(280);
19:PRINTESC(281);20:PRINTESC(282);21:PRINTESC(283);22:PRINTESC(284);
23:PRINTESC(285);24:PRINTESC(286);25:PRINTESC(287);26:PRINTESC(288);
27:PRINTESC(289);28:PRINTESC(290);29:PRINTESC(291);30:PRINTESC(292);
31:PRINTESC(293);32:PRINTESC(294);33:PRINTESC(295);34:PRINTESC(296);
35:PRINTESC(297);36:PRINTESC(298);37:PRINTESC(299);38:PRINTESC(300);
39:PRINTESC(301);40:PRINTESC(302);41:PRINTESC(303);42:PRINTESC(304);
OTHERS:PRINT(305)END;END;{:229}{233:}PROCEDURE FIXDATEANDTI;
VAR T:INTEGER;DATE:INTEGER;G:BOOLEAN;BEGIN CALLI(131137,,T,T,G);
DATE:=T DIV 262144;EQTB[3870].INT:=(T MOD 262144)DIV 60;
EQTB[3871].INT:=(DATE MOD 31)+1;EQTB[3872].INT:=((DATE DIV 31)MOD 12)+1;
EQTB[3873].INT:=(DATE DIV(31*12))+1964;END;{:233}{234:}
PROCEDURE BEGINDIAGNOS;BEGIN OLDSETTING:=SELECTOR;
IF HISTORY=0 THEN HISTORY:=1;
IF(EQTB[3879].INT=0)AND(SELECTOR=19)THEN SELECTOR:=SELECTOR-1;END;
PROCEDURE ENDDIAGNOSTI(BLANKLINE:BOOLEAN);BEGIN PRINTNL(228);
IF BLANKLINE THEN PRINTLN;SELECTOR:=OLDSETTING;END;{:234}{236:}
PROCEDURE PRINTLENGTHP(N:INTEGER);BEGIN CASE N OF 0:PRINTESC(306);
1:PRINTESC(307);2:PRINTESC(308);3:PRINTESC(309);4:PRINTESC(310);
5:PRINTESC(311);6:PRINTESC(312);7:PRINTESC(313);8:PRINTESC(314);
9:PRINTESC(315);10:PRINTESC(316);11:PRINTESC(317);12:PRINTESC(318);
13:PRINTESC(319);14:PRINTESC(320);15:PRINTESC(321);16:PRINTESC(322);
17:PRINTESC(323);18:PRINTESC(324);OTHERS:PRINT(325)END;END;{:236}{246:}
FUNCTION IDLOOKUP(J,L:INTEGER):HALFWORD;LABEL 40;VAR H:INTEGER;
P:HALFWORD;K:HALFWORD;BEGIN{248:}H:=BUFFER[J];
FOR K:=J+1 TO J+L-1 DO BEGIN H:=H+H+BUFFER[K];
WHILE H>=1777 DO H:=H-1777;END{:248};P:=H+258;
WHILE TRUE DO BEGIN IF(HASH[P].RH>0)AND((STRSTART[HASH[P].RH+1]-STRSTART
[HASH[P].RH])=L)THEN IF STREQBUF(HASH[P].RH,J)THEN GOTO 40;
IF HASH[P].LH=0 THEN BEGIN IF NONEWCONTROL THEN P:=2368 ELSE{247:}
BEGIN IF HASH[P].RH>0 THEN BEGIN REPEAT IF(HASHUSED=258)THEN OVERFLOW(
327,2100);HASHUSED:=HASHUSED-1;UNTIL HASH[HASHUSED].RH=0;
HASH[P].LH:=HASHUSED;P:=HASHUSED;END;
BEGIN IF POOLPTR+L>POOLSIZE THEN OVERFLOW(129,POOLSIZE);END;
FOR K:=J TO J+L-1 DO BEGIN STRPOOL[POOLPTR]:=BUFFER[K];
POOLPTR:=POOLPTR+1;END;HASH[P].RH:=MAKESTRING;CSCOUNT:=CSCOUNT+1;
END{:247};GOTO 40;END;P:=HASH[P].LH;END;40:IDLOOKUP:=P;END;{:246}{251:}
PROCEDURE PRIMITIVE(S:STRNUMBER;C:QUARTERWORD;O:HALFWORD);
VAR K:POOLPOINTER;J:SMALLNUMBER;L:SMALLNUMBER;
BEGIN IF S<128 THEN CURVAL:=S+1 ELSE BEGIN K:=STRSTART[S];
L:=STRSTART[S+1]-K;FOR J:=0 TO L-1 DO BUFFER[J]:=STRPOOL[K+J];
CURVAL:=IDLOOKUP(0,L);BEGIN STRPTR:=STRPTR-1;POOLPTR:=STRSTART[STRPTR];
END;HASH[CURVAL].RH:=S;END;EQTB[CURVAL].HH.B1:=1;EQTB[CURVAL].HH.B0:=C;
EQTB[CURVAL].HH.RH:=O;END;{:251}{261:}
PROCEDURE NEWSAVELEVEL(C:GROUPCODE);
BEGIN IF SAVEPTR>MAXSAVESTACK THEN BEGIN MAXSAVESTACK:=SAVEPTR;
IF MAXSAVESTACK>SAVESIZE-6 THEN OVERFLOW(364,SAVESIZE);END;
SAVESTACK[SAVEPTR].HH.B0:=2;SAVESTACK[SAVEPTR].HH.B1:=CURGROUP;
SAVESTACK[SAVEPTR].HH.RH:=CURBOUNDARY;
IF CURLEVEL=511 THEN OVERFLOW(365,511);CURBOUNDARY:=SAVEPTR;
CURLEVEL:=CURLEVEL+1;SAVEPTR:=SAVEPTR+1;CURGROUP:=C;END;{:261}{262:}
PROCEDURE EQDESTROY(W:MEMORYWORD);VAR Q:HALFWORD;
BEGIN CASE W.HH.B0 OF 106,107,108,109:DELETETOKENR(W.HH.RH);
111:DELETEGLUERE(W.HH.RH);112:BEGIN Q:=W.HH.RH;
IF Q<>0 THEN FREENODE(Q,MEM[Q].HH.LH+MEM[Q].HH.LH+1);END;
113:FLUSHNODELIS(W.HH.RH);OTHERS:END;END;{:262}{263:}
PROCEDURE EQSAVE(P:HALFWORD;L:QUARTERWORD);
BEGIN IF SAVEPTR>MAXSAVESTACK THEN BEGIN MAXSAVESTACK:=SAVEPTR;
IF MAXSAVESTACK>SAVESIZE-6 THEN OVERFLOW(364,SAVESIZE);END;
IF L=0 THEN SAVESTACK[SAVEPTR].HH.B0:=1 ELSE BEGIN SAVESTACK[SAVEPTR]:=
EQTB[P];SAVEPTR:=SAVEPTR+1;SAVESTACK[SAVEPTR].HH.B0:=0;END;
SAVESTACK[SAVEPTR].HH.B1:=L;SAVESTACK[SAVEPTR].HH.RH:=P;
SAVEPTR:=SAVEPTR+1;END;{:263}{264:}PROCEDURE EQDEFINE(P:HALFWORD;
T:QUARTERWORD;E:HALFWORD);
BEGIN IF EQTB[P].HH.B1=CURLEVEL THEN EQDESTROY(EQTB[P])ELSE IF CURLEVEL>
1 THEN EQSAVE(P,EQTB[P].HH.B1);EQTB[P].HH.B1:=CURLEVEL;EQTB[P].HH.B0:=T;
EQTB[P].HH.RH:=E;END;{:264}{265:}PROCEDURE EQWORDDEFINE(P:HALFWORD;
W:INTEGER);
BEGIN IF XEQLEVEL[P]<>CURLEVEL THEN BEGIN EQSAVE(P,XEQLEVEL[P]);
XEQLEVEL[P]:=CURLEVEL;END;EQTB[P].INT:=W;END;{:265}{266:}
PROCEDURE GEQDEFINE(P:HALFWORD;T:QUARTERWORD;E:HALFWORD);
BEGIN EQDESTROY(EQTB[P]);EQTB[P].HH.B1:=1;EQTB[P].HH.B0:=T;
EQTB[P].HH.RH:=E;END;PROCEDURE GEQWORDDEFIN(P:HALFWORD;W:INTEGER);
BEGIN EQTB[P].INT:=W;XEQLEVEL[P]:=1;END;{:266}{267:}PROCEDURE UNSAVE;
LABEL 30;VAR P:HALFWORD;L:QUARTERWORD;
BEGIN IF CURLEVEL>1 THEN BEGIN CURLEVEL:=CURLEVEL-1;{268:}
WHILE TRUE DO BEGIN SAVEPTR:=SAVEPTR-1;
IF SAVESTACK[SAVEPTR].HH.B0=2 THEN GOTO 30;P:=SAVESTACK[SAVEPTR].HH.RH;
IF SAVESTACK[SAVEPTR].HH.B0=0 THEN BEGIN L:=SAVESTACK[SAVEPTR].HH.B1;
SAVEPTR:=SAVEPTR-1;END ELSE SAVESTACK[SAVEPTR]:=EQTB[2368];{269:}
IF P<3850 THEN IF EQTB[P].HH.B1=1 THEN EQDESTROY(SAVESTACK[SAVEPTR])ELSE
BEGIN EQDESTROY(EQTB[P]);EQTB[P]:=SAVESTACK[SAVEPTR];
END ELSE IF XEQLEVEL[P]<>1 THEN BEGIN EQTB[P]:=SAVESTACK[SAVEPTR];
XEQLEVEL[P]:=L;END{:269};END;30:CURGROUP:=SAVESTACK[SAVEPTR].HH.B1;
CURBOUNDARY:=SAVESTACK[SAVEPTR].HH.RH{:268};END ELSE CONFUSION(366);END;
{:267}{273:}PROCEDURE PREPAREMAG;
BEGIN IF(MAGSET>0)AND(EQTB[3867].INT<>MAGSET)THEN BEGIN PRINTNL(368);
PRINTINT(EQTB[3867].INT);PRINT(369);PRINTNL(370);BEGIN HELPPTR:=2;
HELPLINE[1]:=371;HELPLINE[0]:=372;END;INTERROR(MAGSET);
GEQWORDDEFIN(3867,MAGSET);END;
IF(EQTB[3867].INT<=0)OR(EQTB[3867].INT>32768)THEN BEGIN PRINTNL(373);
BEGIN HELPPTR:=1;HELPLINE[0]:=374;END;INTERROR(EQTB[3867].INT);
GEQWORDDEFIN(3867,1000);END;MAGSET:=EQTB[3867].INT;END;{:273}{280:}
PROCEDURE TOKENSHOW(P:HALFWORD);
BEGIN IF P<>0 THEN SHOWTOKENLIS(MEM[P].HH.RH,0,1000);END;{:280}{282:}
PROCEDURE PRINTCMDCHR(CMD:QUARTERWORD;CHRCODE:HALFWORD);
BEGIN CASE CMD OF 1:BEGIN PRINT(378);PRINTASCII(CHRCODE);END;
2:BEGIN PRINT(379);PRINTASCII(CHRCODE);END;3:BEGIN PRINT(380);
PRINTASCII(CHRCODE);END;
4:IF CHRCODE=128 THEN PRINTESC(381)ELSE BEGIN PRINT(382);
PRINTASCII(CHRCODE);END;5:PRINTESC(383);6:BEGIN PRINT(384);
PRINTASCII(CHRCODE);END;7:BEGIN PRINT(385);PRINTASCII(CHRCODE);END;
8:BEGIN PRINT(386);PRINTASCII(CHRCODE);END;9:PRINT(387);10:PRINT(388);
11:BEGIN PRINT(389);PRINTASCII(CHRCODE);END;12:BEGIN PRINT(390);
PRINTASCII(CHRCODE);END;{223:}73:PRINTSKIPPAR(CHRCODE);{:223}{226:}
70:CASE CHRCODE OF 2899:PRINTESC(257);2900:PRINTESC(258);
2901:PRINTESC(259);2902:PRINTESC(260);OTHERS:PRINTESC(261)END;{:226}
{231:}71:PRINTPARAM(CHRCODE);{:231}{238:}72:PRINTLENGTHP(CHRCODE);{:238}
{253:}43:PRINTESC(331);74:PRINTESC(359);59:PRINTESC(339);
40:PRINTESC(353);86:PRINTESC(340);16:PRINTESC(332);103:PRINTESC(333);
90:PRINTESC(338);15:PRINTESC(334);64:PRINTESC(335);60:PRINTESC(341);
62:PRINTESC(32);99:PRINTESC(336);32:PRINTESC(342);36:PRINTESC(343);
39:PRINTESC(344);37:PRINTESC(198);42:PRINTESC(47);69:PRINTESC(345);
18:PRINTESC(217);44:PRINTESC(346);87:PRINTESC(348);17:PRINTESC(347);
52:PRINTESC(349);34:PRINTESC(350);53:PRINTESC(203);61:PRINTESC(351);
63:PRINTESC(355);88:PRINTESC(356);0:PRINTESC(357);95:PRINTESC(358);
83:PRINTESC(337);76:PRINTESC(354);79:PRINTESC(352);25:PRINTESC(360);
38:PRINTESC(218);33:PRINTESC(361);54:PRINTESC(362);35:PRINTESC(363);
{:253}{318:}13:PRINTESC(417);{:318}{358:}
100:IF CHRCODE=0 THEN PRINTESC(451)ELSE PRINTESC(452);{:358}{366:}
105:CASE CHRCODE OF 1:PRINTESC(454);2:PRINTESC(455);3:PRINTESC(456);
4:PRINTESC(457);OTHERS:PRINTESC(453)END;{:366}{390:}
68:IF CHRCODE=0 THEN PRINTESC(484)ELSE IF CHRCODE=1 THEN PRINTESC(485)
ELSE IF CHRCODE=2 THEN PRINTESC(486)ELSE PRINTESC(487);
67:IF CHRCODE=0 THEN PRINTESC(488)ELSE PRINTESC(489);{:390}{395:}
75:IF CHRCODE=1 THEN PRINTESC(493)ELSE PRINTESC(492);
78:IF CHRCODE=0 THEN PRINTESC(494)ELSE PRINTESC(495);{:395}{446:}
104:IF CHRCODE=0 THEN PRINTESC(564)ELSE IF CHRCODE=1 THEN PRINTESC(565)
ELSE PRINTESC(566);{:446}{462:}101:CASE CHRCODE OF 1:PRINTESC(580);
2:PRINTESC(581);3:PRINTESC(582);4:PRINTESC(583);5:PRINTESC(584);
6:PRINTESC(585);7:PRINTESC(586);8:PRINTESC(587);9:PRINTESC(588);
10:PRINTESC(589);11:PRINTESC(590);12:PRINTESC(591);
OTHERS:PRINTESC(579)END;{:462}{466:}
102:IF CHRCODE=2 THEN PRINTESC(592)ELSE IF CHRCODE=4 THEN PRINTESC(593)
ELSE PRINTESC(594);{:466}{944:}77:CASE CHRCODE OF 0:PRINTESC(779);
1:PRINTESC(780);2:PRINTESC(781);3:PRINTESC(782);4:PRINTESC(783);
5:PRINTESC(784);6:PRINTESC(785);OTHERS:PRINTESC(786)END;{:944}{1011:}
14:IF CHRCODE=1 THEN PRINTESC(833)ELSE PRINTESC(832);{:1011}{1017:}
26:CASE CHRCODE OF 4:PRINTESC(835);0:PRINTESC(836);1:PRINTESC(837);
2:PRINTESC(838);OTHERS:PRINTESC(839)END;
27:CASE CHRCODE OF 4:PRINTESC(840);0:PRINTESC(841);1:PRINTESC(842);
2:PRINTESC(843);OTHERS:PRINTESC(844)END;28:PRINTESC(204);
29:PRINTESC(207);30:PRINTESC(208);{:1017}{1030:}
21:IF CHRCODE=1 THEN PRINTESC(864)ELSE PRINTESC(865);
22:IF CHRCODE=1 THEN PRINTESC(866)ELSE PRINTESC(867);
20:CASE CHRCODE OF 0:PRINTESC(868);1:PRINTESC(869);2:PRINTESC(870);
3:PRINTESC(871);4:PRINTESC(872);5:PRINTESC(873);OTHERS:PRINTESC(874)END;
31:IF CHRCODE=100 THEN PRINTESC(876)ELSE IF CHRCODE=101 THEN PRINTESC(
877)ELSE IF CHRCODE=102 THEN PRINTESC(878)ELSE PRINTESC(875);{:1030}
{1047:}41:IF CHRCODE=0 THEN PRINTESC(893)ELSE PRINTESC(892);{:1047}
{1067:}23:IF CHRCODE=1 THEN PRINTESC(898)ELSE PRINTESC(897);
24:IF CHRCODE=1 THEN PRINTESC(900)ELSE PRINTESC(899);{:1067}{1074:}
45:IF CHRCODE=1 THEN PRINTESC(45)ELSE PRINTESC(215);{:1074}{1106:}
46:IF CHRCODE=1 THEN PRINTESC(939)ELSE PRINTESC(938);{:1106}{1120:}
48:CASE CHRCODE OF 16:PRINTESC(685);17:PRINTESC(686);18:PRINTESC(687);
19:PRINTESC(688);20:PRINTESC(689);21:PRINTESC(690);22:PRINTESC(691);
26:PRINTESC(694);OTHERS:PRINTESC(693)END;
49:IF CHRCODE=1 THEN PRINTESC(697)ELSE IF CHRCODE=2 THEN PRINTESC(698)
ELSE PRINTESC(940);{:1120}{1132:}51:PRINTSTYLE(CHRCODE);{:1132}{1141:}
50:CASE CHRCODE OF 1:PRINTESC(955);2:PRINTESC(956);3:PRINTESC(957);
4:PRINTESC(958);5:PRINTESC(959);OTHERS:PRINTESC(954)END;{:1141}{1150:}
47:IF CHRCODE=30 THEN PRINTESC(695)ELSE PRINTESC(696);{:1150}{1170:}
84:IF CHRCODE=1 THEN PRINTESC(979)ELSE IF CHRCODE=2 THEN PRINTESC(980)
ELSE PRINTESC(981);
89:IF CHRCODE=0 THEN PRINTESC(982)ELSE IF CHRCODE=1 THEN PRINTESC(983)
ELSE IF CHRCODE=2 THEN PRINTESC(984)ELSE PRINTESC(985);{:1170}{1181:}
85:IF CHRCODE<>0 THEN PRINTESC(999)ELSE PRINTESC(998);{:1181}{1184:}
65:BEGIN PRINTESC(332);PRINTOCTAL(CHRCODE);END;66:BEGIN PRINTESC(347);
PRINTOCTAL(CHRCODE);END;{:1184}{1189:}
80:IF CHRCODE=3210 THEN PRINTESC(1000)ELSE IF CHRCODE=3338 THEN PRINTESC
(1001)ELSE IF CHRCODE=3466 THEN PRINTESC(1002)ELSE IF CHRCODE=3594 THEN
PRINTESC(1003)ELSE IF CHRCODE=3722 THEN PRINTESC(1004)ELSE PRINTESC(1005
);81:PRINTSIZE(CHRCODE-3161);{:1189}{1194:}
91,92,93,94:BEGIN CASE CMD OF 91:PRINTESC(1026);92:PRINTESC(1027);
93:PRINTESC(1028);OTHERS:PRINTESC(1029)END;
IF CHRCODE=0 THEN PRINT(484)ELSE IF CHRCODE=1 THEN PRINT(485)ELSE IF
CHRCODE=2 THEN PRINT(486)ELSE PRINT(487);END;{:1194}{1210:}
96:IF CHRCODE=1 THEN PRINTESC(1042)ELSE PRINTESC(1041);{:1210}{1218:}
82:BEGIN PRINT(1052);PRINT(FONTNAME[CHRCODE]);
IF FONTSIZE[CHRCODE]<>FONTDSIZE[CHRCODE]THEN BEGIN PRINT(563);
PRINTSCALED(FONTSIZE[CHRCODE]);PRINT(527);END;END;{:1218}{1220:}
97:CASE CHRCODE OF 0:PRINTESC(1053);1:PRINTESC(1054);2:PRINTESC(1055);
OTHERS:PRINTESC(1056)END;{:1220}{1225:}
58:IF CHRCODE=0 THEN PRINTESC(1058)ELSE PRINTESC(1057);{:1225}{1230:}
56:IF CHRCODE=0 THEN PRINTESC(1059)ELSE PRINTESC(1060);{:1230}{1238:}
55:IF CHRCODE=3466 THEN PRINTESC(1066)ELSE PRINTESC(1067);{:1238}{1243:}
19:CASE CHRCODE OF 1:PRINTESC(1069);2:PRINTESC(1070);3:PRINTESC(1071);
OTHERS:PRINTESC(1068)END;{:1243}{1246:}98:PRINT(1080);106:PRINT(1081);
107:PRINTESC(1082);108:PRINTESC(1083);109:PRINTESC(1084);
110:PRINTESC(1085);{:1246}{1298:}57:CASE CHRCODE OF 0:PRINTESC(1120);
1:PRINTESC(1121);2:PRINTESC(1122);3:PRINTESC(1123);4:PRINTESC(1124);
OTHERS:PRINT(1125)END;{:1298}OTHERS:PRINT(391)END;END;{:282}{283:}
PROCEDURE SHOWCURCMDCH;BEGIN BEGINDIAGNOS;PRINTNL(123);
IF CURLIST.MODEFIELD<>SHOWNMODE THEN BEGIN PRINTMODE(CURLIST.MODEFIELD);
PRINT(392);SHOWNMODE:=CURLIST.MODEFIELD;END;PRINTCMDCHR(CURCMD,CURCHR);
PRINTCHAR(125);ENDDIAGNOSTI(FALSE);END;{:283}{295:}
PROCEDURE SHOWCONTEXT;LABEL 30;VAR OLDSETTING:0..21;{299:}I:0..BUFSIZE;
J:0..BUFSIZE;L:0..HALFERRORLIN;M:INTEGER;N:0..ERRORLINE;P:INTEGER;
Q:INTEGER;{:299}BEGIN BASEPTR:=INPUTPTR;INPUTSTACK[BASEPTR]:=CURINPUT;
WHILE TRUE DO BEGIN CURINPUT:=INPUTSTACK[BASEPTR];{296:}
IF(BASEPTR=INPUTPTR)OR(CURINPUT.STATEFIELD<>0)OR(CURINPUT.INDEXFIELD<>3)
OR(CURINPUT.LOCFIELD<>0)THEN BEGIN TALLY:=0;OLDSETTING:=SELECTOR;
IF CURINPUT.STATEFIELD<>0 THEN BEGIN{297:}
IF CURINPUT.NAMEFIELD<=16 THEN IF(CURINPUT.NAMEFIELD=0)THEN IF BASEPTR=0
THEN PRINTNL(397)ELSE PRINTNL(398)ELSE BEGIN PRINTNL(399);
PRINTINT(CURINPUT.NAMEFIELD-1);PRINTCHAR(62);
END ELSE BEGIN IF PAGE>1 THEN BEGIN PRINTNL(400);PRINTINT(PAGE);
PRINT(401);END ELSE PRINTNL(402);PRINTINT(LINE);END;PRINTCHAR(32){:297};
{302:}BEGIN L:=TALLY;TALLY:=0;SELECTOR:=20;TRICKCOUNT:=1000000;END;
IF BUFFER[CURINPUT.LIMITFIELD]=13 THEN J:=CURINPUT.LIMITFIELD ELSE J:=
CURINPUT.LIMITFIELD+1;
IF J>0 THEN FOR I:=CURINPUT.STARTFIELD TO J-1 DO BEGIN IF I=CURINPUT.
LOCFIELD THEN BEGIN FIRSTCOUNT:=TALLY;
TRICKCOUNT:=TALLY+1+ERRORLINE-HALFERRORLIN;
IF TRICKCOUNT<ERRORLINE THEN TRICKCOUNT:=ERRORLINE;END;PRINT(BUFFER[I]);
END{:302};END ELSE BEGIN{298:}
CASE CURINPUT.INDEXFIELD OF 0:PRINTNL(403);1,2:PRINTNL(404);
3:IF CURINPUT.LOCFIELD=0 THEN PRINTNL(405)ELSE PRINTNL(406);
4:PRINTNL(407);5:BEGIN PRINTLN;PRINTCS(CURINPUT.NAMEFIELD);END;
6:PRINTNL(408);7:PRINTNL(409);8:PRINTNL(410);9:PRINTNL(411);
10:PRINTNL(412);11:PRINTNL(413);OTHERS:PRINTNL(63)END{:298};{303:}
BEGIN L:=TALLY;TALLY:=0;SELECTOR:=20;TRICKCOUNT:=1000000;END;
IF CURINPUT.INDEXFIELD<5 THEN SHOWTOKENLIS(CURINPUT.STARTFIELD,CURINPUT.
LOCFIELD,100000)ELSE SHOWTOKENLIS(MEM[CURINPUT.STARTFIELD].HH.RH,
CURINPUT.LOCFIELD,100000){:303};END;SELECTOR:=OLDSETTING;{301:}
IF TRICKCOUNT=1000000 THEN BEGIN FIRSTCOUNT:=TALLY;
TRICKCOUNT:=TALLY+1+ERRORLINE-HALFERRORLIN;
IF TRICKCOUNT<ERRORLINE THEN TRICKCOUNT:=ERRORLINE;END;
IF TALLY<TRICKCOUNT THEN M:=TALLY-FIRSTCOUNT ELSE M:=TRICKCOUNT-
FIRSTCOUNT;IF L+FIRSTCOUNT<=HALFERRORLIN THEN BEGIN P:=0;
N:=L+FIRSTCOUNT;END ELSE BEGIN PRINT(414);
P:=L+FIRSTCOUNT-HALFERRORLIN+3;N:=HALFERRORLIN;END;
FOR Q:=P TO FIRSTCOUNT-1 DO PRINTCHAR(TRICKBUF[Q MOD ERRORLINE]);
PRINTLN;FOR Q:=1 TO N DO PRINTCHAR(32);
IF M+N<=ERRORLINE THEN P:=FIRSTCOUNT+M ELSE P:=FIRSTCOUNT+(ERRORLINE-N-3
);FOR Q:=FIRSTCOUNT TO P-1 DO PRINTCHAR(TRICKBUF[Q MOD ERRORLINE]);
IF M+N>ERRORLINE THEN PRINT(414){:301};END{:296};
IF(CURINPUT.STATEFIELD<>0)THEN IF(CURINPUT.NAMEFIELD>16)OR(BASEPTR=0)
THEN GOTO 30;BASEPTR:=BASEPTR-1;END;30:CURINPUT:=INPUTSTACK[INPUTPTR];
END;{:295}{307:}PROCEDURE BEGINTOKENLI(P:HALFWORD;T:QUARTERWORD);
BEGIN BEGIN IF INPUTPTR>MAXINSTACK THEN BEGIN MAXINSTACK:=INPUTPTR;
IF INPUTPTR=STACKSIZE THEN OVERFLOW(415,STACKSIZE);END;
INPUTSTACK[INPUTPTR]:=CURINPUT;INPUTPTR:=INPUTPTR+1;END;
CURINPUT.STATEFIELD:=0;CURINPUT.STARTFIELD:=P;CURINPUT.INDEXFIELD:=T;
IF T>=5 THEN BEGIN MEM[P].HH.LH:=MEM[P].HH.LH+1;
IF T=5 THEN CURINPUT.LIMITFIELD:=PARAMPTR ELSE CURINPUT.LOCFIELD:=MEM[P]
.HH.RH;END ELSE CURINPUT.LOCFIELD:=P;END;{:307}{308:}
PROCEDURE ENDTOKENLIST;
BEGIN IF CURINPUT.INDEXFIELD>=3 THEN BEGIN IF CURINPUT.INDEXFIELD<=4
THEN FLUSHLIST(CURINPUT.STARTFIELD)ELSE BEGIN DELETETOKENR(CURINPUT.
STARTFIELD);
IF CURINPUT.INDEXFIELD=5 THEN WHILE PARAMPTR>CURINPUT.LIMITFIELD DO
BEGIN PARAMPTR:=PARAMPTR-1;FLUSHLIST(PARAMSTACK[PARAMPTR]);END;END;
END ELSE IF CURINPUT.INDEXFIELD=1 THEN ALIGNSTATE:=0;
BEGIN INPUTPTR:=INPUTPTR-1;CURINPUT:=INPUTSTACK[INPUTPTR];END;
BEGIN IF INTERRUPT<>0 THEN PAUSEFORINST;END;END;{:308}{309:}
PROCEDURE BACKINPUT;VAR P:HALFWORD;
BEGIN WHILE(CURINPUT.STATEFIELD=0)AND(CURINPUT.LOCFIELD=0)DO
ENDTOKENLIST;P:=GETAVAIL;MEM[P].HH.LH:=CURTOK;
IF CURTOK<768 THEN IF CURTOK<512 THEN ALIGNSTATE:=ALIGNSTATE-1 ELSE
ALIGNSTATE:=ALIGNSTATE+1;
BEGIN IF INPUTPTR>MAXINSTACK THEN BEGIN MAXINSTACK:=INPUTPTR;
IF INPUTPTR=STACKSIZE THEN OVERFLOW(415,STACKSIZE);END;
INPUTSTACK[INPUTPTR]:=CURINPUT;INPUTPTR:=INPUTPTR+1;END;
CURINPUT.STATEFIELD:=0;CURINPUT.STARTFIELD:=P;CURINPUT.INDEXFIELD:=3;
CURINPUT.LOCFIELD:=P;END;{:309}{310:}PROCEDURE BACKERROR;
BEGIN OKTOINTERRUP:=FALSE;BACKINPUT;OKTOINTERRUP:=TRUE;ERROR;END;
PROCEDURE INSERROR;BEGIN OKTOINTERRUP:=FALSE;BACKINPUT;
CURINPUT.INDEXFIELD:=4;OKTOINTERRUP:=TRUE;ERROR;END;{:310}{311:}
PROCEDURE BEGINFILEREA;
BEGIN IF INOPEN=MAXINOPEN THEN OVERFLOW(416,MAXINOPEN);
IF FIRST=BUFSIZE THEN OVERFLOW(128,BUFSIZE);INOPEN:=INOPEN+1;
BEGIN IF INPUTPTR>MAXINSTACK THEN BEGIN MAXINSTACK:=INPUTPTR;
IF INPUTPTR=STACKSIZE THEN OVERFLOW(415,STACKSIZE);END;
INPUTSTACK[INPUTPTR]:=CURINPUT;INPUTPTR:=INPUTPTR+1;END;
CURINPUT.INDEXFIELD:=INOPEN;LINESTACK[CURINPUT.INDEXFIELD]:=LINE;
CURINPUT.STARTFIELD:=FIRST;CURINPUT.STATEFIELD:=1;CURINPUT.NAMEFIELD:=0;
PAGESTACK[CURINPUT.INDEXFIELD]:=PAGE;END;{:311}{312:}
PROCEDURE ENDFILEREADI;BEGIN FIRST:=CURINPUT.STARTFIELD;
PAGE:=PAGESTACK[CURINPUT.INDEXFIELD];
LINE:=LINESTACK[CURINPUT.INDEXFIELD];
IF CURINPUT.NAMEFIELD>16 THEN ACLOSE(INPUTFILE[CURINPUT.INDEXFIELD]);
BEGIN INPUTPTR:=INPUTPTR-1;CURINPUT:=INPUTSTACK[INPUTPTR];END;
INOPEN:=INOPEN-1;END;{:312}{313:}PROCEDURE CLEARFORERRO;
BEGIN WHILE(CURINPUT.STATEFIELD<>0)AND(CURINPUT.NAMEFIELD=0)AND(INPUTPTR
>0)AND(CURINPUT.LOCFIELD>CURINPUT.LIMITFIELD)DO ENDFILEREADI;PRINTLN;
BREAKIN(TTY,TRUE);END;{:313}{319:}PROCEDURE CHECKOUTERVA;VAR P:HALFWORD;
Q:HALFWORD;BEGIN IF SCANNERSTATU<>0 THEN BEGIN{320:}
IF CSPTR<>0 THEN BEGIN P:=GETAVAIL;MEM[P].HH.LH:=4096+CSPTR;
BEGINTOKENLI(P,3);CURCMD:=10;CURCHR:=32;END{:320};
IF SCANNERSTATU>1 THEN{321:}BEGIN RUNAWAY;
IF CSPTR=0 THEN PRINTNL(425)ELSE BEGIN CSPTR:=0;PRINTNL(426);END;
PRINT(427);{322:}P:=GETAVAIL;CASE SCANNERSTATU OF 2:BEGIN PRINT(433);
MEM[P].HH.LH:=637;END;3:BEGIN PRINT(434);MEM[P].HH.LH:=PARTOKEN;
LONGSTATE:=108;END;4:BEGIN PRINT(435);MEM[P].HH.LH:=637;Q:=P;
P:=GETAVAIL;MEM[P].HH.RH:=Q;MEM[P].HH.LH:=6455;END;END;
BEGINTOKENLI(P,4){:322};PRINT(428);SPRINTCS(WARNINGINDEX);
BEGIN HELPPTR:=4;HELPLINE[3]:=429;HELPLINE[2]:=430;HELPLINE[1]:=431;
HELPLINE[0]:=432;END;DELETIONSALL:=FALSE;ERROR;DELETIONSALL:=TRUE;
END{:321}ELSE BEGIN PRINTNL(418);PRINTCMDCHR(101,CURIF);PRINT(419);
PRINTINT(SKIPLINE);IF SKIPPAGE>1 THEN BEGIN PRINT(420);
PRINTINT(SKIPPAGE);END;BEGIN HELPPTR:=3;HELPLINE[2]:=421;
HELPLINE[1]:=422;HELPLINE[0]:=423;END;
IF CSPTR<>0 THEN CSPTR:=0 ELSE HELPLINE[2]:=424;CURTOK:=6458;INSERROR;
END;END;END;{:319}{323:}PROCEDURE FIRMUPTHELIN;FORWARD;{:323}{324:}
PROCEDURE GETNEXT;LABEL 20,25,21,26,40,10;VAR K:0..BUFSIZE;T:HALFWORD;
BEGIN 20:CSPTR:=0;IF CURINPUT.STATEFIELD<>0 THEN{326:}
BEGIN 25:IF CURINPUT.LOCFIELD<=CURINPUT.LIMITFIELD THEN BEGIN CURCHR:=
BUFFER[CURINPUT.LOCFIELD];CURINPUT.LOCFIELD:=CURINPUT.LOCFIELD+1;
21:CURCMD:=EQTB[3210+CURCHR].HH.RH;{327:}
CASE CURINPUT.STATEFIELD+CURCMD OF{328:}10,26,42,27,43{:328}:GOTO 25;
1,17,33:{337:}
BEGIN IF CURINPUT.LOCFIELD>CURINPUT.LIMITFIELD THEN CSPTR:=257 ELSE
BEGIN 26:K:=CURINPUT.LOCFIELD;CURCHR:=BUFFER[K];K:=K+1;
IF(EQTB[3210+CURCHR].HH.RH=11)AND(K<=CURINPUT.LIMITFIELD)THEN{339:}
BEGIN REPEAT CURCHR:=BUFFER[K];K:=K+1;
UNTIL(EQTB[3210+CURCHR].HH.RH<>11)OR(K>CURINPUT.LIMITFIELD);{338:}
BEGIN IF(BUFFER[K]=CURCHR)AND(EQTB[3210+CURCHR].HH.RH=7)AND(K<CURINPUT.
LIMITFIELD)THEN BEGIN CURCHR:=BUFFER[K+1];
IF(CURCHR<=95)AND(CURCHR>=63)THEN BEGIN IF CURCHR>63 THEN BUFFER[K-1]:=
CURCHR-64 ELSE BUFFER[K-1]:=127;
CURINPUT.LIMITFIELD:=CURINPUT.LIMITFIELD-2;FIRST:=FIRST-2;
WHILE K<=CURINPUT.LIMITFIELD DO BEGIN BUFFER[K]:=BUFFER[K+2];K:=K+1;END;
GOTO 26;END;END;END{:338};
IF EQTB[3210+BUFFER[K-1]].HH.RH<>11 THEN K:=K-1;
IF K>CURINPUT.LOCFIELD+1 THEN BEGIN CSPTR:=IDLOOKUP(CURINPUT.LOCFIELD,K-
CURINPUT.LOCFIELD);CURINPUT.LOCFIELD:=K;GOTO 40;END;END{:339}ELSE{338:}
BEGIN IF(BUFFER[K]=CURCHR)AND(EQTB[3210+CURCHR].HH.RH=7)AND(K<CURINPUT.
LIMITFIELD)THEN BEGIN CURCHR:=BUFFER[K+1];
IF(CURCHR<=95)AND(CURCHR>=63)THEN BEGIN IF CURCHR>63 THEN BUFFER[K-1]:=
CURCHR-64 ELSE BUFFER[K-1]:=127;
CURINPUT.LIMITFIELD:=CURINPUT.LIMITFIELD-2;FIRST:=FIRST-2;
WHILE K<=CURINPUT.LIMITFIELD DO BEGIN BUFFER[K]:=BUFFER[K+2];K:=K+1;END;
GOTO 26;END;END;END{:338};CSPTR:=1+BUFFER[CURINPUT.LOCFIELD];
CURINPUT.LOCFIELD:=CURINPUT.LOCFIELD+1;END;40:CURCMD:=EQTB[CSPTR].HH.B0;
CURCHR:=EQTB[CSPTR].HH.RH;CURINPUT.STATEFIELD:=17;
IF CURCMD>=108 THEN CHECKOUTERVA;END{:337};14,30,46:{336:}
BEGIN CSPTR:=CURCHR+129;CURCMD:=EQTB[CSPTR].HH.B0;
CURCHR:=EQTB[CSPTR].HH.RH;CURINPUT.STATEFIELD:=1;
IF CURCMD>=108 THEN CHECKOUTERVA;END{:336};8,24,40:{335:}
BEGIN IF(CURCHR=BUFFER[CURINPUT.LOCFIELD])AND(CURINPUT.LOCFIELD<CURINPUT
.LIMITFIELD)THEN IF(BUFFER[CURINPUT.LOCFIELD+1]<=95)AND(BUFFER[CURINPUT.
LOCFIELD+1]>=63)THEN BEGIN IF BUFFER[CURINPUT.LOCFIELD+1]=63 THEN CURCHR
:=127 ELSE CURCHR:=BUFFER[CURINPUT.LOCFIELD+1]-64;
CURINPUT.LOCFIELD:=CURINPUT.LOCFIELD+2;GOTO 21;END;
CURINPUT.STATEFIELD:=1;END{:335};16,32,48:{329:}BEGIN PRINTNL(436);
BEGIN HELPPTR:=2;HELPLINE[1]:=437;HELPLINE[0]:=438;END;
DELETIONSALL:=FALSE;ERROR;DELETIONSALL:=TRUE;GOTO 25;END{:329};{330:}
11:{332:}BEGIN CURINPUT.STATEFIELD:=17;CURCHR:=32;END{:332};6:{331:}
BEGIN CURINPUT.LOCFIELD:=CURINPUT.LIMITFIELD+1;CURCMD:=10;CURCHR:=32;
END{:331};22,15,31,47:{333:}
BEGIN CURINPUT.LOCFIELD:=CURINPUT.LIMITFIELD+1;GOTO 25;END{:333};
38:{334:}BEGIN CURINPUT.LOCFIELD:=CURINPUT.LIMITFIELD+1;CSPTR:=PARLOC;
CURCMD:=EQTB[CSPTR].HH.B0;CURCHR:=EQTB[CSPTR].HH.RH;
IF CURCMD>=108 THEN CHECKOUTERVA;END{:334};2:ALIGNSTATE:=ALIGNSTATE+1;
18,34:BEGIN CURINPUT.STATEFIELD:=1;ALIGNSTATE:=ALIGNSTATE+1;END;
3:ALIGNSTATE:=ALIGNSTATE-1;19,35:BEGIN CURINPUT.STATEFIELD:=1;
ALIGNSTATE:=ALIGNSTATE-1;END;
20,21,23,25,28,29,36,37,39,41,44,45:CURINPUT.STATEFIELD:=1;{:330}
OTHERS:END{:327};END ELSE BEGIN CURINPUT.STATEFIELD:=33;{342:}
IF CURINPUT.NAMEFIELD>16 THEN{344:}BEGIN LINE:=LINE+1;
FIRST:=CURINPUT.STARTFIELD;
IF NOT FORCEEOF THEN BEGIN IF INPUTLN(INPUTFILE[CURINPUT.INDEXFIELD])
THEN FIRMUPTHELIN ELSE IF CURINPUT.LIMITFIELD<>CURINPUT.STARTFIELD THEN
CURINPUT.LIMITFIELD:=CURINPUT.STARTFIELD ELSE FORCEEOF:=TRUE;END;
IF FORCEEOF THEN BEGIN PRINTCHAR(41);FORCEEOF:=FALSE;BREAK(TTY);
ENDFILEREADI;CHECKOUTERVA;GOTO 20;END;BUFFER[CURINPUT.LIMITFIELD]:=13;
FIRST:=CURINPUT.LIMITFIELD+1;CURINPUT.LOCFIELD:=CURINPUT.STARTFIELD;
END{:344}ELSE BEGIN IF NOT(CURINPUT.NAMEFIELD=0)THEN BEGIN CURCMD:=0;
CURCHR:=0;GOTO 10;END;IF INPUTPTR>0 THEN BEGIN ENDFILEREADI;GOTO 20;END;
IF SELECTOR<18 THEN OPENLOGFILE;
IF INTERACTION>1 THEN BEGIN IF CURINPUT.LIMITFIELD=CURINPUT.STARTFIELD
THEN PRINTNL(439);PRINTLN;FIRST:=CURINPUT.STARTFIELD;BEGIN PRINT(42);
TERMINPUT;END;CURINPUT.LIMITFIELD:=LAST;BUFFER[CURINPUT.LIMITFIELD]:=13;
FIRST:=LAST+1;CURINPUT.LOCFIELD:=CURINPUT.STARTFIELD;
END ELSE FATALERROR(440);END{:342};
BEGIN IF INTERRUPT<>0 THEN PAUSEFORINST;END;GOTO 25;END;END{:326}
ELSE{340:}
IF CURINPUT.LOCFIELD<>0 THEN BEGIN T:=MEM[CURINPUT.LOCFIELD].HH.LH;
CURINPUT.LOCFIELD:=MEM[CURINPUT.LOCFIELD].HH.RH;
IF T>=4096 THEN BEGIN CSPTR:=T-4096;CURCMD:=EQTB[CSPTR].HH.B0;
CURCHR:=EQTB[CSPTR].HH.RH;IF CURCMD>=108 THEN CHECKOUTERVA;
END ELSE BEGIN CURCMD:=T DIV 256;CURCHR:=T MOD 256;
CASE CURCMD OF 1:ALIGNSTATE:=ALIGNSTATE+1;2:ALIGNSTATE:=ALIGNSTATE-1;
5:{341:}BEGIN BEGINTOKENLI(PARAMSTACK[CURINPUT.LIMITFIELD+CURCHR-1],0);
GOTO 20;END{:341};OTHERS:END;END;END ELSE BEGIN ENDTOKENLIST;GOTO 20;
END{:340};{325:}
IF CURCMD<=5 THEN IF CURCMD>=4 THEN IF ALIGNSTATE=0 THEN{753:}
BEGIN IF SCANNERSTATU=4 THEN FATALERROR(727);
CURCMD:=MEM[CURALIGN+5].HH.LH;MEM[CURALIGN+5].HH.LH:=CURCHR;
IF CURCMD=61 THEN BEGINTOKENLI(25010,2)ELSE BEGINTOKENLI(MEM[CURALIGN+2]
.INT,2);ALIGNSTATE:=1000000;GOTO 20;END{:753}{:325};10:END;{:324}{345:}
PROCEDURE FIRMUPTHELIN;VAR K:0..BUFSIZE;BEGIN CURINPUT.LIMITFIELD:=LAST;
IF(EQTB[3878].INT<>0)AND(INTERACTION>1)AND(BUFFER[CURINPUT.STARTFIELD]<>
12)THEN BEGIN PRINTLN;
IF CURINPUT.STARTFIELD=CURINPUT.LIMITFIELD THEN BEGIN BUFFER[CURINPUT.
STARTFIELD]:=32;CURINPUT.LIMITFIELD:=CURINPUT.LIMITFIELD+1;END;
SELECTOR:=SELECTOR-1;
FOR K:=CURINPUT.STARTFIELD TO CURINPUT.LIMITFIELD-1 DO BEGIN PRINTCHAR(
BUFFER[K]);PTWR1W(0,ORD(XCHR[BUFFER[K]]));;END;PRINT(441);
FIRST:=CURINPUT.STARTFIELD;IF NOT INPUTLN(TTY)THEN FATALERROR(133);
IF LAST>FIRST THEN FOR K:=FIRST TO LAST-1 DO PRINTCHAR(BUFFER[K]);
CURINPUT.LIMITFIELD:=LAST;PRINTLN;SELECTOR:=SELECTOR+1;END;END;{:345}
{347:}PROCEDURE GETTOKEN;BEGIN NONEWCONTROL:=FALSE;GETNEXT;
NONEWCONTROL:=TRUE;
IF CSPTR=0 THEN CURTOK:=(CURCMD*256)+CURCHR ELSE CURTOK:=4096+CSPTR;END;
{:347}{349:}{370:}PROCEDURE MACROCALL;LABEL 10,22,30,31,40;
VAR R:HALFWORD;P:HALFWORD;Q:HALFWORD;S:HALFWORD;T:HALFWORD;U,V:HALFWORD;
RBRACEPTR:HALFWORD;N:SMALLNUMBER;UNBALANCE:HALFWORD;M:HALFWORD;
REFCOUNT:HALFWORD;SAVESCANNERS:SMALLNUMBER;SAVEWARNINGI:HALFWORD;
BEGIN SAVESCANNERS:=SCANNERSTATU;SAVEWARNINGI:=WARNINGINDEX;
WARNINGINDEX:=CSPTR;REFCOUNT:=CURCHR;R:=MEM[REFCOUNT].HH.RH;N:=0;
IF EQTB[3880].INT<>0 THEN{381:}BEGIN BEGINDIAGNOS;PRINTLN;
PRINTCS(WARNINGINDEX);TOKENSHOW(REFCOUNT);ENDDIAGNOSTI(FALSE);END{:381};
IF MEM[R].HH.LH<>3584 THEN{372:}BEGIN SCANNERSTATU:=3;UNBALANCE:=0;
LONGSTATE:=EQTB[CSPTR].HH.B0;
IF LONGSTATE>=108 THEN LONGSTATE:=LONGSTATE-2;
REPEAT IF(MEM[R].HH.LH>3583)OR(MEM[R].HH.LH<3328)THEN S:=0 ELSE BEGIN S
:=MEM[R].HH.RH;R:=S;P:=25003;MEM[P].HH.RH:=0;M:=0;END;{373:}22:GETTOKEN;
IF CURTOK=MEM[R].HH.LH THEN{374:}BEGIN R:=MEM[R].HH.RH;
IF(MEM[R].HH.LH>=3328)AND(MEM[R].HH.LH<=3584)THEN BEGIN IF CURTOK<512
THEN ALIGNSTATE:=ALIGNSTATE-1;GOTO 40;END ELSE GOTO 22;END{:374};{377:}
IF S<>R THEN IF S=0 THEN{378:}BEGIN PRINTNL(472);SPRINTCS(WARNINGINDEX);
PRINT(473);BEGIN HELPPTR:=4;HELPLINE[3]:=474;HELPLINE[2]:=475;
HELPLINE[1]:=476;HELPLINE[0]:=477;END;ERROR;GOTO 10;END{:378}
ELSE BEGIN T:=S;REPEAT BEGIN Q:=GETAVAIL;MEM[P].HH.RH:=Q;
MEM[Q].HH.LH:=MEM[T].HH.LH;P:=Q;END;M:=M+1;U:=MEM[T].HH.RH;V:=S;
WHILE TRUE DO BEGIN IF U=R THEN IF CURTOK<>MEM[V].HH.LH THEN GOTO 30
ELSE BEGIN R:=MEM[V].HH.RH;GOTO 22;END;
IF MEM[U].HH.LH<>MEM[V].HH.LH THEN GOTO 30;U:=MEM[U].HH.RH;
V:=MEM[V].HH.RH;END;30:T:=MEM[T].HH.RH;UNTIL T=R;R:=S;END{:377};
IF CURTOK=PARTOKEN THEN IF LONGSTATE<>107 THEN{376:}
BEGIN IF LONGSTATE=106 THEN BEGIN RUNAWAY;PRINTNL(467);
SPRINTCS(WARNINGINDEX);PRINT(468);BEGIN HELPPTR:=3;HELPLINE[2]:=469;
HELPLINE[1]:=470;HELPLINE[0]:=471;END;BACKERROR;END;
PSTACK[N]:=MEM[25003].HH.RH;ALIGNSTATE:=ALIGNSTATE-UNBALANCE;
FOR M:=0 TO N DO FLUSHLIST(PSTACK[M]);GOTO 10;END{:376};
IF CURTOK<768 THEN IF CURTOK<512 THEN{379:}BEGIN UNBALANCE:=1;
WHILE TRUE DO BEGIN BEGIN BEGIN Q:=AVAIL;
IF Q=0 THEN Q:=GETAVAIL ELSE BEGIN AVAIL:=MEM[Q].HH.RH;MEM[Q].HH.RH:=0;
DYNUSED:=DYNUSED+1;END;END;MEM[P].HH.RH:=Q;MEM[Q].HH.LH:=CURTOK;P:=Q;
END;GETTOKEN;IF CURTOK=PARTOKEN THEN IF LONGSTATE<>107 THEN{376:}
BEGIN IF LONGSTATE=106 THEN BEGIN RUNAWAY;PRINTNL(467);
SPRINTCS(WARNINGINDEX);PRINT(468);BEGIN HELPPTR:=3;HELPLINE[2]:=469;
HELPLINE[1]:=470;HELPLINE[0]:=471;END;BACKERROR;END;
PSTACK[N]:=MEM[25003].HH.RH;ALIGNSTATE:=ALIGNSTATE-UNBALANCE;
FOR M:=0 TO N DO FLUSHLIST(PSTACK[M]);GOTO 10;END{:376};
IF CURTOK<768 THEN IF CURTOK<512 THEN UNBALANCE:=UNBALANCE+1 ELSE BEGIN
UNBALANCE:=UNBALANCE-1;IF UNBALANCE=0 THEN GOTO 31;END;END;
31:RBRACEPTR:=P;BEGIN Q:=GETAVAIL;MEM[P].HH.RH:=Q;MEM[Q].HH.LH:=CURTOK;
P:=Q;END;END{:379}ELSE{375:}BEGIN BACKINPUT;PRINTNL(459);
SPRINTCS(WARNINGINDEX);PRINT(460);BEGIN HELPPTR:=6;HELPLINE[5]:=461;
HELPLINE[4]:=462;HELPLINE[3]:=463;HELPLINE[2]:=464;HELPLINE[1]:=465;
HELPLINE[0]:=466;END;ALIGNSTATE:=ALIGNSTATE+1;LONGSTATE:=106;
CURTOK:=PARTOKEN;INSERROR;END{:375}ELSE BEGIN Q:=GETAVAIL;
MEM[P].HH.RH:=Q;MEM[Q].HH.LH:=CURTOK;P:=Q;END;M:=M+1;
IF(MEM[R].HH.LH<3328)OR(MEM[R].HH.LH>3584)THEN GOTO 22;
40:IF S<>0 THEN{380:}
BEGIN IF(M=1)AND(MEM[P].HH.LH<768)AND(P<>25003)THEN BEGIN MEM[RBRACEPTR]
.HH.RH:=0;BEGIN MEM[P].HH.RH:=AVAIL;AVAIL:=P;DYNUSED:=DYNUSED-1;END;
P:=MEM[25003].HH.RH;PSTACK[N]:=MEM[P].HH.RH;BEGIN MEM[P].HH.RH:=AVAIL;
AVAIL:=P;DYNUSED:=DYNUSED-1;END;END ELSE PSTACK[N]:=MEM[25003].HH.RH;
N:=N+1;IF EQTB[3880].INT<>0 THEN BEGIN BEGINDIAGNOS;PRINTNL(35);
PRINTINT(N);PRINT(478);SHOWTOKENLIS(PSTACK[N-1],0,1000);
ENDDIAGNOSTI(FALSE);END;END{:380}{:373};UNTIL MEM[R].HH.LH=3584;
END{:372};{371:}
WHILE(CURINPUT.STATEFIELD=0)AND(CURINPUT.LOCFIELD=0)DO ENDTOKENLIST;
BEGINTOKENLI(REFCOUNT,5);CURINPUT.NAMEFIELD:=WARNINGINDEX;
CURINPUT.LOCFIELD:=MEM[R].HH.RH;
IF N>0 THEN BEGIN IF PARAMPTR+N>MAXPARAMSTAC THEN BEGIN MAXPARAMSTAC:=
PARAMPTR+N;IF MAXPARAMSTAC>PARAMSIZE THEN OVERFLOW(458,PARAMSIZE);END;
FOR M:=0 TO N-1 DO PARAMSTACK[PARAMPTR+M]:=PSTACK[M];
PARAMPTR:=PARAMPTR+N;END{:371};10:SCANNERSTATU:=SAVESCANNERS;
WARNINGINDEX:=SAVEWARNINGI;END;{:370}{360:}PROCEDURE INSERTRELAX;
BEGIN CURTOK:=4096+CSPTR;BACKINPUT;CURTOK:=6461;BACKINPUT;
CURINPUT.INDEXFIELD:=4;END;{:360}PROCEDURE PASSTEXT;FORWARD;
PROCEDURE STARTINPUT;FORWARD;PROCEDURE CONDITIONAL;FORWARD;
PROCEDURE GETXTOKEN;FORWARD;PROCEDURE CONVTOKS;FORWARD;
PROCEDURE EXPANDCALLS;VAR T:HALFWORD;P,Q,R:HALFWORD;J:0..BUFSIZE;
CVBACKUP:INTEGER;CVLBACKUP,RADIXBACKUP:SMALLNUMBER;
BACKUPBACKUP:HALFWORD;BEGIN CVBACKUP:=CURVAL;CVLBACKUP:=CURVALLEVEL;
RADIXBACKUP:=RADIX;BACKUPBACKUP:=MEM[25013].HH.RH;
CASE CURCMD OF 106,107,108,109:MACROCALL;110:{356:}BEGIN CURTOK:=6460;
BACKINPUT;END{:356};105:{367:}
BEGIN IF CURMARK[CURCHR]<>0 THEN BEGINTOKENLI(CURMARK[CURCHR],10);
END{:367};99:{350:}BEGIN GETTOKEN;T:=CURTOK;GETTOKEN;
IF CURCMD>97 THEN EXPANDCALLS ELSE BACKINPUT;CURTOK:=T;BACKINPUT;
END{:350};103:{353:}BEGIN R:=GETAVAIL;P:=R;REPEAT GETXTOKEN;
IF CSPTR=0 THEN BEGIN Q:=GETAVAIL;MEM[P].HH.RH:=Q;MEM[Q].HH.LH:=CURTOK;
P:=Q;END;UNTIL CSPTR<>0;IF CURCMD<>64 THEN{354:}BEGIN PRINTNL(448);
BEGIN HELPPTR:=2;HELPLINE[1]:=449;HELPLINE[0]:=450;END;BACKERROR;
END{:354};{355:}J:=FIRST;P:=MEM[R].HH.RH;
WHILE P<>0 DO BEGIN IF J>=MAXBUFSTACK THEN BEGIN MAXBUFSTACK:=J+1;
IF MAXBUFSTACK=BUFSIZE THEN OVERFLOW(128,BUFSIZE);END;
BUFFER[J]:=MEM[P].HH.LH MOD 256;J:=J+1;P:=MEM[P].HH.RH;END;
IF J>FIRST+1 THEN BEGIN NONEWCONTROL:=FALSE;
CSPTR:=IDLOOKUP(FIRST,J-FIRST);NONEWCONTROL:=TRUE;
END ELSE IF J=FIRST THEN CSPTR:=257 ELSE CSPTR:=1+BUFFER[FIRST]{:355};
FLUSHLIST(R);IF EQTB[CSPTR].HH.B0=98 THEN BEGIN EQTB[CSPTR]:=EQTB[2365];
END;CURTOK:=CSPTR+4096;BACKINPUT;END{:353};104:CONVTOKS;101:CONDITIONAL;
102:{481:}
IF CURCHR>IFLIMIT THEN IF IFLIMIT=1 THEN INSERTRELAX ELSE BEGIN PRINTNL(
605);PRINTCMDCHR(102,CURCHR);BEGIN HELPPTR:=1;HELPLINE[0]:=596;END;
ERROR;END ELSE BEGIN WHILE CURCHR<>2 DO PASSTEXT;{472:}BEGIN P:=CONDPTR;
IFLINE:=MEM[P+1].INT;CURIF:=MEM[P].HH.B1;IFLIMIT:=MEM[P].HH.B0;
CONDPTR:=MEM[P].HH.RH;FREENODE(P,2);
IF EQTB[3886].INT>1 THEN SHOWCURCMDCH;END{:472};END{:481};100:{359:}
IF CURCHR>0 THEN FORCEEOF:=TRUE ELSE IF NAMEINPROGRE THEN INSERTRELAX
ELSE STARTINPUT{:359};OTHERS:{351:}BEGIN PRINTNL(442);BEGIN HELPPTR:=5;
HELPLINE[4]:=443;HELPLINE[3]:=444;HELPLINE[2]:=445;HELPLINE[1]:=446;
HELPLINE[0]:=447;END;ERROR;END{:351}END;CURVAL:=CVBACKUP;
CURVALLEVEL:=CVLBACKUP;RADIX:=RADIXBACKUP;
MEM[25013].HH.RH:=BACKUPBACKUP;END;{:349}{361:}PROCEDURE GETXTOKEN;
LABEL 30;BEGIN WHILE TRUE DO BEGIN GETNEXT;IF CURCMD<=97 THEN GOTO 30;
IF CURCMD>=106 THEN IF CURCMD<110 THEN MACROCALL ELSE BEGIN CSPTR:=2364;
CURCMD:=9;GOTO 30;END ELSE EXPANDCALLS;END;
30:IF CSPTR=0 THEN CURTOK:=(CURCMD*256)+CURCHR ELSE CURTOK:=4096+CSPTR;
END;{:361}{362:}PROCEDURE XTOKEN;
BEGIN WHILE CURCMD>97 DO BEGIN EXPANDCALLS;GETNEXT;END;
IF CSPTR=0 THEN CURTOK:=(CURCMD*256)+CURCHR ELSE CURTOK:=4096+CSPTR;END;
{:362}{383:}PROCEDURE SCANLEFTBRAC;BEGIN{384:}REPEAT GETXTOKEN;
UNTIL CURCMD<>10{:384};IF CURCMD<>1 THEN BEGIN PRINTNL(479);
BEGIN HELPPTR:=4;HELPLINE[3]:=480;HELPLINE[2]:=481;HELPLINE[1]:=482;
HELPLINE[0]:=483;END;BACKERROR;CURTOK:=379;CURCMD:=1;CURCHR:=123;
ALIGNSTATE:=ALIGNSTATE+1;END;END;{:383}{385:}PROCEDURE SCANOPTIONAL;
BEGIN{384:}REPEAT GETXTOKEN;UNTIL CURCMD<>10{:384};
IF CURTOK<>3133 THEN BACKINPUT;END;{:385}{386:}
FUNCTION SCANKEYWORD(S:STRNUMBER):BOOLEAN;LABEL 10;VAR P:HALFWORD;
Q:HALFWORD;K:POOLPOINTER;BEGIN P:=25013;MEM[P].HH.RH:=0;K:=STRSTART[S];
WHILE K<STRSTART[S+1]DO BEGIN GETXTOKEN;
IF(CSPTR=0)AND((CURCHR=STRPOOL[K])OR(CURCHR=STRPOOL[K]-32))THEN BEGIN
BEGIN Q:=GETAVAIL;MEM[P].HH.RH:=Q;MEM[Q].HH.LH:=CURTOK;P:=Q;END;K:=K+1;
END ELSE BEGIN BACKINPUT;
IF P<>25013 THEN BEGINTOKENLI(MEM[25013].HH.RH,3);SCANKEYWORD:=FALSE;
GOTO 10;END;END;FLUSHLIST(MEM[25013].HH.RH);SCANKEYWORD:=TRUE;10:END;
{:386}{387:}PROCEDURE SCANINT;FORWARD;{410:}PROCEDURE SCANSEVENBIT;
BEGIN SCANINT;IF(CURVAL<0)OR(CURVAL>127)THEN BEGIN PRINTNL(503);
BEGIN HELPPTR:=2;HELPLINE[1]:=504;HELPLINE[0]:=505;END;INTERROR(CURVAL);
CURVAL:=0;END;END;{:410}{411:}PROCEDURE SCANEIGHTBIT;BEGIN SCANINT;
IF(CURVAL<0)OR(CURVAL>255)THEN BEGIN PRINTNL(506);BEGIN HELPPTR:=2;
HELPLINE[1]:=507;HELPLINE[0]:=505;END;INTERROR(CURVAL);CURVAL:=0;END;
END;{:411}{412:}PROCEDURE SCANFOURBITI;BEGIN SCANINT;
IF(CURVAL<0)OR(CURVAL>15)THEN BEGIN PRINTNL(508);BEGIN HELPPTR:=2;
HELPLINE[1]:=509;HELPLINE[0]:=505;END;INTERROR(CURVAL);CURVAL:=0;END;
END;{:412}{413:}PROCEDURE SCANCHARNUM;BEGIN SCANINT;
IF(CURVAL<0)OR(CURVAL>255)THEN BEGIN PRINTNL(510);BEGIN HELPPTR:=2;
HELPLINE[1]:=511;HELPLINE[0]:=505;END;INTERROR(CURVAL);CURVAL:=0;END;
END;{:413}{414:}PROCEDURE SCANFIFTEENB;BEGIN SCANINT;
IF(CURVAL<0)OR(CURVAL>32767)THEN BEGIN PRINTNL(512);BEGIN HELPPTR:=2;
HELPLINE[1]:=513;HELPLINE[0]:=505;END;INTERROR(CURVAL);CURVAL:=0;END;
END;{:414}{415:}PROCEDURE SCANTWENTYSE;BEGIN SCANINT;
IF(CURVAL<0)OR(CURVAL>134217727)THEN BEGIN PRINTNL(514);
BEGIN HELPPTR:=2;HELPLINE[1]:=515;HELPLINE[0]:=505;END;INTERROR(CURVAL);
CURVAL:=0;END;END;{:415}{548:}PROCEDURE SCANFONTIDEN;VAR F:INTERNALFONT;
BEGIN{384:}REPEAT GETXTOKEN;UNTIL CURCMD<>10{:384};
IF CURCMD=82 THEN F:=CURCHR ELSE BEGIN PRINTNL(636);BEGIN HELPPTR:=2;
HELPLINE[1]:=637;HELPLINE[0]:=638;END;BACKERROR;F:=0;END;CURVAL:=F;END;
{:548}{549:}PROCEDURE SCANTEXINFO(WRITING:BOOLEAN);VAR F:INTERNALFONT;
BEGIN SCANFONTIDEN;F:=CURVAL;SCANINT;
IF CURVAL<=0 THEN CURVAL:=FMEMPTR ELSE BEGIN IF WRITING AND(CURVAL<=4)
AND(CURVAL>=2)AND(FONTGLUE[F]<>0)THEN BEGIN DELETEGLUERE(FONTGLUE[F]);
FONTGLUE[F]:=0;END;
IF CURVAL>FONTPARAMS[F]THEN IF F<FONTPTR THEN CURVAL:=FMEMPTR ELSE{551:}
BEGIN REPEAT IF FMEMPTR=FONTMEMSIZE THEN OVERFLOW(643,FONTMEMSIZE);
FONTINFO[FMEMPTR].INT:=0;FMEMPTR:=FMEMPTR+1;
FONTPARAMS[F]:=FONTPARAMS[F]+1;UNTIL CURVAL=FONTPARAMS[F];
CURVAL:=FMEMPTR-1;END{:551}ELSE CURVAL:=CURVAL+PARAMBASE[F];END;{550:}
IF CURVAL=FMEMPTR THEN BEGIN PRINTNL(623);SPRINTCS(FONTIDENT[F]);
PRINT(639);PRINTINT(FONTPARAMS[F]);PRINT(640);BEGIN HELPPTR:=2;
HELPLINE[1]:=641;HELPLINE[0]:=642;END;ERROR;END{:550};END;{:549}{:387}
{391:}PROCEDURE SCANTHE(LEVEL:SMALLNUMBER;NEGATIVE:BOOLEAN);LABEL 20;
VAR M:HALFWORD;P:0..NESTSIZE;BEGIN 20:GETXTOKEN;M:=CURCHR;
CASE CURCMD OF 80:{392:}BEGIN SCANSEVENBIT;
IF M<4149 THEN BEGIN CURVAL:=EQTB[M+CURVAL].HH.RH;CURVALLEVEL:=0;
END ELSE BEGIN CURVAL:=EQTB[M+CURVAL].INT;CURVALLEVEL:=0;END;END{:392};
70,81,82,90:{393:}IF(LEVEL<>6)OR NEGATIVE THEN BEGIN PRINTNL(490);
BEGIN HELPPTR:=1;HELPLINE[0]:=491;END;ERROR;
IF LEVEL<>6 THEN BEGIN CURVAL:=0;CURVALLEVEL:=1;
END ELSE BEGIN CURVAL:=0;CURVALLEVEL:=0;END;
END ELSE IF CURCMD=70 THEN BEGIN CURVAL:=EQTB[M].HH.RH;CURVALLEVEL:=6;
END ELSE{404:}IF CURCMD=82 THEN BEGIN CURVAL:=CURCHR;CURVALLEVEL:=4;
END ELSE IF CURCMD=90 THEN BEGIN CURVAL:=FONTIDENT[EQTB[3160].HH.RH];
CURVALLEVEL:=5;END ELSE BEGIN SCANFOURBITI;
BEGIN CURVAL:=FONTIDENT[EQTB[M+CURVAL].HH.RH];CURVALLEVEL:=5;END;
END{:404}{:393};71:BEGIN CURVAL:=EQTB[3850+M].INT;CURVALLEVEL:=0;END;
72:BEGIN CURVAL:=EQTB[4277+M].INT;CURVALLEVEL:=1;END;
73:IF M>=14 THEN BEGIN CURVAL:=EQTB[2369+M].HH.RH;CURVALLEVEL:=3;
END ELSE BEGIN CURVAL:=EQTB[2369+M].HH.RH;CURVALLEVEL:=2;END;75:{396:}
IF ABS(CURLIST.MODEFIELD)<>M THEN BEGIN PRINTNL(490);BEGIN HELPPTR:=4;
HELPLINE[3]:=496;HELPLINE[2]:=497;HELPLINE[1]:=498;HELPLINE[0]:=491;END;
ERROR;IF LEVEL<>6 THEN BEGIN CURVAL:=0;CURVALLEVEL:=1;
END ELSE BEGIN CURVAL:=0;CURVALLEVEL:=0;END;
END ELSE BEGIN CURVAL:=CURLIST.AUXFIELD;
IF M=1 THEN CURVALLEVEL:=1 ELSE CURVALLEVEL:=0;END{:396};76:{399:}
BEGIN NEST[NESTPTR]:=CURLIST;P:=NESTPTR;
WHILE ABS(NEST[P].MODEFIELD)<>1 DO P:=P-1;BEGIN CURVAL:=NEST[P].PGFIELD;
CURVALLEVEL:=0;END;END{:399};78:{397:}
BEGIN IF M=0 THEN CURVAL:=DEADCYCLES ELSE CURVAL:=INSERTPENALT;
CURVALLEVEL:=0;END{:397};77:{398:}
BEGIN IF PAGECONTENTS=0 THEN IF M=0 THEN CURVAL:=1073741823 ELSE CURVAL
:=0 ELSE CURVAL:=PAGESOFAR[M];CURVALLEVEL:=1;END{:398};79:{400:}
BEGIN IF EQTB[2898].HH.RH=0 THEN CURVAL:=0 ELSE CURVAL:=MEM[EQTB[2898].
HH.RH].HH.LH;CURVALLEVEL:=0;END{:400};83:BEGIN CURVAL:=EQTB[3209].HH.RH;
CURVALLEVEL:=0;END;65,66:BEGIN CURVAL:=CURCHR;CURVALLEVEL:=0;END;
74:{402:}BEGIN SCANTEXINFO(FALSE);FONTINFO[FMEMPTR].INT:=0;
BEGIN CURVAL:=FONTINFO[CURVAL].INT;CURVALLEVEL:=1;END;END{:402};
68:{403:}BEGIN SCANEIGHTBIT;CASE M OF 0:CURVAL:=EQTB[3893+CURVAL].INT;
1:CURVAL:=EQTB[4296+CURVAL].INT;2:CURVAL:=EQTB[2386+CURVAL].HH.RH;
3:CURVAL:=EQTB[2642+CURVAL].HH.RH;END;CURVALLEVEL:=M;END{:403};69:{401:}
BEGIN CURVAL:=0;
IF NOT(CURLIST.TAILFIELD>25000)AND(CURLIST.MODEFIELD<>0)THEN BEGIN IF
MEM[CURLIST.TAILFIELD].HH.B0=10 THEN CURVAL:=MEM[CURLIST.TAILFIELD+1].HH
.LH;
END ELSE IF(CURLIST.MODEFIELD=1)AND(CURLIST.TAILFIELD=CURLIST.HEADFIELD)
AND(LASTPAGEGLUE<>262143)THEN CURVAL:=LASTPAGEGLUE;CURVALLEVEL:=2;
END{:401};67:BEGIN IF M>0 THEN NEGATIVE:=NOT NEGATIVE;GOTO 20;END;
OTHERS:{405:}BEGIN PRINTNL(499);PRINTCMDCHR(CURCMD,CURCHR);PRINT(500);
BEGIN HELPPTR:=1;HELPLINE[0]:=491;END;ERROR;
IF LEVEL<>6 THEN BEGIN CURVAL:=0;CURVALLEVEL:=1;
END ELSE BEGIN CURVAL:=0;CURVALLEVEL:=0;END;END{:405}END;
WHILE CURVALLEVEL>LEVEL DO{406:}
BEGIN IF CURVALLEVEL=2 THEN CURVAL:=MEM[CURVAL+1].INT ELSE IF
CURVALLEVEL=3 THEN{407:}BEGIN PRINTNL(501);BEGIN HELPPTR:=1;
HELPLINE[0]:=502;END;ERROR;END{:407};CURVALLEVEL:=CURVALLEVEL-1;
END{:406};{408:}
IF NEGATIVE THEN IF CURVALLEVEL>=2 THEN BEGIN CURVAL:=NEWSPEC(CURVAL);
{409:}BEGIN MEM[CURVAL+1].INT:=-MEM[CURVAL+1].INT;
MEM[CURVAL+2].INT:=-MEM[CURVAL+2].INT;
MEM[CURVAL+3].INT:=-MEM[CURVAL+3].INT;END{:409};
END ELSE CURVAL:=-CURVAL ELSE IF(CURVALLEVEL>=2)AND(CURVALLEVEL<=3)THEN
MEM[CURVAL].HH.RH:=MEM[CURVAL].HH.RH+1{:408};END;{:391}{418:}
PROCEDURE SCANINT;LABEL 30;VAR NEGATIVE:BOOLEAN;M:INTEGER;D:SMALLNUMBER;
VACUOUS:BOOLEAN;OKSOFAR:BOOLEAN;BEGIN RADIX:=0;OKSOFAR:=TRUE;{419:}
NEGATIVE:=FALSE;REPEAT{384:}REPEAT GETXTOKEN;UNTIL CURCMD<>10{:384};
IF CURTOK=3117 THEN BEGIN NEGATIVE:=NOT NEGATIVE;CURTOK:=3115;END;
UNTIL CURTOK<>3115{:419};IF CURTOK=3168 THEN{420:}BEGIN GETTOKEN;
IF CURTOK<4096 THEN BEGIN CURVAL:=CURCHR;
IF CURCMD<=2 THEN IF CURCMD=2 THEN ALIGNSTATE:=ALIGNSTATE+1 ELSE
ALIGNSTATE:=ALIGNSTATE-1;
END ELSE IF CURTOK<4225 THEN CURVAL:=CURTOK-4097 ELSE CURVAL:=CURTOK
-4225;IF CURVAL>127 THEN BEGIN PRINTNL(516);BEGIN HELPPTR:=2;
HELPLINE[1]:=517;HELPLINE[0]:=518;END;CURVAL:=48;BACKERROR;
END ELSE{421:}BEGIN GETTOKEN;IF CURCMD<>10 THEN BACKINPUT;END{:421};
END{:420}ELSE IF(CURCMD>=65)AND(CURCMD<=68)THEN{422:}
IF CURCMD<=66 THEN CURVAL:=CURCHR ELSE BEGIN IF CURCMD=68 THEN BACKINPUT
ELSE IF CURCHR<>0 THEN NEGATIVE:=NOT NEGATIVE;SCANTHE(0,FALSE);END{:422}
ELSE{423:}BEGIN RADIX:=10;M:=214748364;
IF CURTOK=3111 THEN BEGIN RADIX:=8;M:=268435456;GETXTOKEN;
END ELSE IF CURTOK=3106 THEN BEGIN RADIX:=16;M:=134217728;GETXTOKEN;END;
VACUOUS:=TRUE;CURVAL:=0;{424:}
WHILE TRUE DO BEGIN IF(CURTOK<3120+RADIX)AND(CURTOK>=3120)AND(CURTOK<=
3129)THEN D:=CURTOK-3120 ELSE IF(RADIX=16)AND(CURTOK<=2886)AND(CURTOK>=
2881)THEN D:=CURTOK-2871 ELSE GOTO 30;VACUOUS:=FALSE;
IF(CURVAL>=M)AND((CURVAL>M)OR(D>7)OR(RADIX<>10))THEN BEGIN IF OKSOFAR
THEN BEGIN PRINTNL(519);BEGIN HELPPTR:=2;HELPLINE[1]:=520;
HELPLINE[0]:=521;END;ERROR;CURVAL:=2147483647;OKSOFAR:=FALSE;END;
END ELSE CURVAL:=CURVAL*RADIX+D;GETXTOKEN;END;30:{:424};
IF VACUOUS THEN{425:}BEGIN PRINTNL(522);BEGIN HELPPTR:=3;
HELPLINE[2]:=523;HELPLINE[1]:=524;HELPLINE[0]:=525;END;BACKERROR;
END{:425}ELSE IF CURCMD<>10 THEN BACKINPUT;END{:423};
IF NEGATIVE THEN CURVAL:=-CURVAL;END;{:418}{427:}
PROCEDURE SCANDIMEN(MU,INF,SHORTCUT:BOOLEAN);LABEL 30,40,45,88,89;
VAR NEGATIVE:BOOLEAN;F:INTEGER;{429:}NUM,DENOM:1..65536;K:SMALLNUMBER;
J:SMALLNUMBER;V:SCALED;SAVECURVAL:INTEGER;{:429}BEGIN F:=0;
ARITHERROR:=FALSE;CURORDER:=0;NEGATIVE:=FALSE;
IF NOT SHORTCUT THEN BEGIN{419:}NEGATIVE:=FALSE;REPEAT{384:}
REPEAT GETXTOKEN;UNTIL CURCMD<>10{:384};
IF CURTOK=3117 THEN BEGIN NEGATIVE:=NOT NEGATIVE;CURTOK:=3115;END;
UNTIL CURTOK<>3115{:419};IF(CURCMD=67)OR(CURCMD=68)THEN{428:}
BEGIN IF CURCMD=68 THEN BACKINPUT ELSE IF CURCHR<>0 THEN NEGATIVE:=NOT
NEGATIVE;SCANTHE(1,FALSE);IF CURVALLEVEL=1 THEN BEGIN IF MU THEN{407:}
BEGIN PRINTNL(501);BEGIN HELPPTR:=1;HELPLINE[0]:=502;END;ERROR;END{:407}
;GOTO 89;END;END{:428}ELSE BEGIN BACKINPUT;
IF CURTOK=3116 THEN CURTOK:=3118;
IF CURTOK<>3118 THEN SCANINT ELSE BEGIN RADIX:=10;CURVAL:=0;END;
IF CURTOK=3116 THEN CURTOK:=3118;IF(RADIX=10)AND(CURTOK=3118)THEN{430:}
BEGIN K:=0;GETTOKEN;WHILE TRUE DO BEGIN GETXTOKEN;
IF(CURTOK>3129)OR(CURTOK<3120)THEN GOTO 30;
IF K<16 THEN BEGIN DIG[K]:=CURTOK-3120;K:=K+1;END;END;
30:F:=ROUNDDECIMAL(K);IF CURCMD<>10 THEN BACKINPUT;END{:430};END;END;
IF CURVAL<0 THEN BEGIN NEGATIVE:=NOT NEGATIVE;CURVAL:=-CURVAL;END;{431:}
IF INF THEN{432:}IF SCANKEYWORD(179)THEN BEGIN CURORDER:=1;
WHILE SCANKEYWORD(108)DO BEGIN IF CURORDER=3 THEN BEGIN PRINTNL(528);
PRINT(529);BEGIN HELPPTR:=1;HELPLINE[0]:=530;END;ERROR;
END ELSE CURORDER:=CURORDER+1;END;GOTO 88;END{:432};IF MU THEN{433:}
IF SCANKEYWORD(205)THEN GOTO 88 ELSE BEGIN PRINTNL(528);PRINT(531);
BEGIN HELPPTR:=4;HELPLINE[3]:=532;HELPLINE[2]:=533;HELPLINE[1]:=534;
HELPLINE[0]:=535;END;ERROR;GOTO 88;END{:433};{434:}
IF SCANKEYWORD(536)THEN BEGIN V:={529:}
FONTINFO[6+PARAMBASE[EQTB[3160].HH.RH]].INT{:529};GOTO 40;END;
IF SCANKEYWORD(537)THEN BEGIN V:={530:}
FONTINFO[5+PARAMBASE[EQTB[3160].HH.RH]].INT{:530};GOTO 40;END;
IF SCANKEYWORD(538)THEN BEGIN SAVECURVAL:=CURVAL;SCANEIGHTBIT;
V:=EQTB[4296+CURVAL].INT;CURVAL:=SAVECURVAL;GOTO 40;END;
IF SCANKEYWORD(539)THEN BEGIN V:=EQTB[4279].INT;GOTO 40;END;
IF SCANKEYWORD(540)THEN J:=1 ELSE IF SCANKEYWORD(541)THEN J:=2 ELSE IF
SCANKEYWORD(542)THEN J:=3 ELSE GOTO 45;SAVECURVAL:=CURVAL;SCANEIGHTBIT;
IF EQTB[2904+CURVAL].HH.RH=0 THEN V:=0 ELSE V:=MEM[EQTB[2904+CURVAL].HH.
RH+J].INT;CURVAL:=SAVECURVAL;
40:CURVAL:=NXPLUSY(CURVAL,V,XNOVERD(V,F,65536));GOTO 89;45:{:434};
IF SCANKEYWORD(526)THEN{435:}BEGIN{421:}BEGIN GETTOKEN;
IF CURCMD<>10 THEN BACKINPUT;END{:421};PREPAREMAG;
IF EQTB[3867].INT<>1000 THEN BEGIN CURVAL:=XNOVERD(CURVAL,1000,EQTB[3867
].INT);F:=(1000*F+65536*REMAINDER)DIV EQTB[3867].INT;
CURVAL:=CURVAL+(F DIV 65536);F:=F MOD 65536;END;END{:435};
IF SCANKEYWORD(527)THEN GOTO 88;{436:}
IF SCANKEYWORD(543)THEN BEGIN NUM:=7227;DENOM:=100;
END ELSE IF SCANKEYWORD(544)THEN BEGIN NUM:=12;DENOM:=1;
END ELSE IF SCANKEYWORD(545)THEN BEGIN NUM:=7227;DENOM:=254;
END ELSE IF SCANKEYWORD(546)THEN BEGIN NUM:=7227;DENOM:=2540;
END ELSE IF SCANKEYWORD(547)THEN BEGIN NUM:=7227;DENOM:=7200;
END ELSE IF SCANKEYWORD(548)THEN BEGIN NUM:=1238;DENOM:=1157;
END ELSE IF SCANKEYWORD(549)THEN BEGIN NUM:=14856;DENOM:=1157;
END ELSE IF SCANKEYWORD(550)THEN GOTO 89 ELSE{437:}BEGIN PRINTNL(528);
PRINT(551);BEGIN HELPPTR:=6;HELPLINE[5]:=552;HELPLINE[4]:=553;
HELPLINE[3]:=554;HELPLINE[2]:=533;HELPLINE[1]:=534;HELPLINE[0]:=535;END;
ERROR;GOTO 88;END{:437};CURVAL:=XNOVERD(CURVAL,NUM,DENOM);
F:=(NUM*F+65536*REMAINDER)DIV DENOM;CURVAL:=CURVAL+(F DIV 65536);
F:=F MOD 65536{:436};
88:IF CURVAL>=16384 THEN ARITHERROR:=TRUE ELSE CURVAL:=CURVAL*65536+F{:
431};89:IF ARITHERROR OR(ABS(CURVAL)>=1073741824)THEN{438:}
BEGIN PRINTNL(555);BEGIN HELPPTR:=2;HELPLINE[1]:=556;HELPLINE[0]:=557;
END;ERROR;CURVAL:=1073741823;ARITHERROR:=FALSE;END{:438};
IF NEGATIVE THEN CURVAL:=-CURVAL;{421:}BEGIN GETTOKEN;
IF CURCMD<>10 THEN BACKINPUT;END{:421};END;{:427}{439:}
PROCEDURE SCANGLUE(LEVEL:SMALLNUMBER);LABEL 10;VAR NEGATIVE:BOOLEAN;
Q:HALFWORD;MU:BOOLEAN;BEGIN MU:=(LEVEL=3);{419:}NEGATIVE:=FALSE;
REPEAT{384:}REPEAT GETXTOKEN;UNTIL CURCMD<>10{:384};
IF CURTOK=3117 THEN BEGIN NEGATIVE:=NOT NEGATIVE;CURTOK:=3115;END;
UNTIL CURTOK<>3115{:419};
IF(CURCMD=67)OR(CURCMD=68)THEN BEGIN IF CURCMD=68 THEN BACKINPUT ELSE IF
CURCHR<>0 THEN NEGATIVE:=NOT NEGATIVE;SCANTHE(LEVEL,NEGATIVE);
IF CURVALLEVEL>=2 THEN BEGIN IF CURVALLEVEL<>LEVEL THEN{407:}
BEGIN PRINTNL(501);BEGIN HELPPTR:=1;HELPLINE[0]:=502;END;ERROR;END{:407}
;GOTO 10;END;
IF CURVALLEVEL=0 THEN SCANDIMEN(MU,FALSE,TRUE)ELSE IF LEVEL=3 THEN{407:}
BEGIN PRINTNL(501);BEGIN HELPPTR:=1;HELPLINE[0]:=502;END;ERROR;END{:407}
;END ELSE BEGIN BACKINPUT;SCANDIMEN(MU,FALSE,FALSE);
IF NEGATIVE THEN CURVAL:=-CURVAL;END;{440:}Q:=NEWSPEC(0);
MEM[Q+1].INT:=CURVAL;
IF SCANKEYWORD(558)THEN BEGIN SCANDIMEN(MU,TRUE,FALSE);
MEM[Q+2].INT:=CURVAL;MEM[Q].HH.B0:=CURORDER;END;
IF SCANKEYWORD(559)THEN BEGIN SCANDIMEN(MU,TRUE,FALSE);
MEM[Q+3].INT:=CURVAL;MEM[Q].HH.B1:=CURORDER;END;CURVAL:=Q{:440};10:END;
{:439}{441:}FUNCTION SCANRULESPEC:HALFWORD;LABEL 21;VAR Q:HALFWORD;
BEGIN Q:=NEWRULE;
IF CURCMD=35 THEN MEM[Q+1].INT:=26215 ELSE BEGIN MEM[Q+3].INT:=26215;
MEM[Q+2].INT:=0;END;
21:IF SCANKEYWORD(560)THEN BEGIN SCANDIMEN(FALSE,FALSE,FALSE);
MEM[Q+1].INT:=CURVAL;GOTO 21;END;
IF SCANKEYWORD(561)THEN BEGIN SCANDIMEN(FALSE,FALSE,FALSE);
MEM[Q+3].INT:=CURVAL;GOTO 21;END;
IF SCANKEYWORD(562)THEN BEGIN SCANDIMEN(FALSE,FALSE,FALSE);
MEM[Q+2].INT:=CURVAL;GOTO 21;END;SCANRULESPEC:=Q;END;{:441}{442:}
FUNCTION STRTOKS:HALFWORD;VAR P:HALFWORD;Q:HALFWORD;T:HALFWORD;
K:POOLPOINTER;
BEGIN BEGIN IF POOLPTR+1>POOLSIZE THEN OVERFLOW(129,POOLSIZE);END;
P:=25003;MEM[P].HH.RH:=0;K:=STRSTART[STRPTR];
WHILE K<POOLPTR DO BEGIN T:=STRPOOL[K];
IF T=32 THEN T:=2592 ELSE T:=3072+T;BEGIN BEGIN Q:=AVAIL;
IF Q=0 THEN Q:=GETAVAIL ELSE BEGIN AVAIL:=MEM[Q].HH.RH;MEM[Q].HH.RH:=0;
DYNUSED:=DYNUSED+1;END;END;MEM[P].HH.RH:=Q;MEM[Q].HH.LH:=T;P:=Q;END;
K:=K+1;END;POOLPTR:=STRSTART[STRPTR];STRTOKS:=P;END;{:442}{443:}
FUNCTION THETOKS(NEGATIVE:BOOLEAN):HALFWORD;VAR OLDSETTING:0..21;
P,Q,R:HALFWORD;BEGIN SCANTHE(6,NEGATIVE);IF CURVALLEVEL>=5 THEN{444:}
BEGIN P:=25003;MEM[P].HH.RH:=0;IF CURVALLEVEL=5 THEN BEGIN Q:=GETAVAIL;
MEM[P].HH.RH:=Q;MEM[Q].HH.LH:=4096+CURVAL;P:=Q;
END ELSE IF CURVAL<>0 THEN BEGIN R:=MEM[CURVAL].HH.RH;
WHILE R<>0 DO BEGIN BEGIN Q:=GETAVAIL;MEM[P].HH.RH:=Q;
MEM[Q].HH.LH:=MEM[R].HH.LH;P:=Q;END;R:=MEM[R].HH.RH;END;END;THETOKS:=P;
END{:444}ELSE BEGIN OLDSETTING:=SELECTOR;SELECTOR:=21;
CASE CURVALLEVEL OF 0:PRINTINT(CURVAL);1:BEGIN PRINTSCALED(CURVAL);
PRINT(527);END;2:BEGIN PRINTSPEC(CURVAL,527);DELETEGLUERE(CURVAL);END;
3:BEGIN PRINTSPEC(CURVAL,205);DELETEGLUERE(CURVAL);END;
4:BEGIN PRINT(FONTNAME[CURVAL]);
IF FONTSIZE[CURVAL]<>FONTDSIZE[CURVAL]THEN BEGIN PRINT(563);
PRINTSCALED(FONTSIZE[CURVAL]);PRINT(527);END;END;END;
SELECTOR:=OLDSETTING;THETOKS:=STRTOKS;END;END;{:443}{447:}
PROCEDURE CONVTOKS;VAR OLDSETTING:0..21;C:0..2;BEGIN C:=CURCHR;
IF C=0 THEN SCANINT ELSE IF C=1 THEN GETTOKEN ELSE IF JOBNAME=0 THEN
OPENLOGFILE;OLDSETTING:=SELECTOR;SELECTOR:=21;
IF C=0 THEN IF CURVAL>=0 THEN PRINTINT(CURVAL)ELSE PRINTROMANIN(-CURVAL)
ELSE IF C=1 THEN IF CSPTR<>0 THEN SPRINTCS(CSPTR)ELSE PRINTCHAR(CURCHR)
ELSE PRINT(JOBNAME);SELECTOR:=OLDSETTING;MEM[25012].HH.RH:=STRTOKS;
BEGINTOKENLI(MEM[25003].HH.RH,4);END;{:447}{448:}
FUNCTION SCANTOKS(MACRODEF,XPAND:BOOLEAN):HALFWORD;LABEL 40,30,31,32;
VAR T:HALFWORD;S:HALFWORD;P:HALFWORD;Q:HALFWORD;UNBALANCE:HALFWORD;
HASHBRACE:HALFWORD;BEGIN SCANNERSTATU:=2;WARNINGINDEX:=CSPTR;
DEFREF:=GETAVAIL;MEM[DEFREF].HH.LH:=0;P:=DEFREF;HASHBRACE:=0;T:=3120;
IF MACRODEF THEN{449:}BEGIN WHILE TRUE DO BEGIN GETTOKEN;
IF CURTOK<768 THEN GOTO 31;IF CURCMD=6 THEN{451:}BEGIN S:=3328+CURCHR;
GETTOKEN;IF CURCMD=1 THEN BEGIN HASHBRACE:=CURTOK;BEGIN Q:=GETAVAIL;
MEM[P].HH.RH:=Q;MEM[Q].HH.LH:=CURTOK;P:=Q;END;BEGIN Q:=GETAVAIL;
MEM[P].HH.RH:=Q;MEM[Q].HH.LH:=3584;P:=Q;END;GOTO 30;END;
IF T=3129 THEN BEGIN PRINTNL(569);BEGIN HELPPTR:=1;HELPLINE[0]:=570;END;
ERROR;END ELSE BEGIN T:=T+1;IF CURTOK<>T THEN BEGIN PRINTNL(571);
BEGIN HELPPTR:=2;HELPLINE[1]:=572;HELPLINE[0]:=573;END;BACKERROR;END;
CURTOK:=S;END;END{:451};BEGIN Q:=GETAVAIL;MEM[P].HH.RH:=Q;
MEM[Q].HH.LH:=CURTOK;P:=Q;END;END;31:BEGIN Q:=GETAVAIL;MEM[P].HH.RH:=Q;
MEM[Q].HH.LH:=3584;P:=Q;END;IF CURCMD=2 THEN{450:}BEGIN PRINTNL(479);
ALIGNSTATE:=ALIGNSTATE+1;BEGIN HELPPTR:=2;HELPLINE[1]:=567;
HELPLINE[0]:=568;END;ERROR;GOTO 40;END{:450};30:END{:449}
ELSE SCANLEFTBRAC;{452:}UNBALANCE:=1;
WHILE TRUE DO BEGIN IF XPAND THEN IF CURCMD<>89 THEN{453:}
BEGIN WHILE TRUE DO BEGIN GETXTOKEN;
IF CURCMD=67 THEN Q:=THETOKS(CURCHR>0)ELSE GOTO 32;
MEM[P].HH.RH:=MEM[25003].HH.RH;P:=Q;END;32:END{:453}
ELSE GETTOKEN ELSE GETTOKEN;
IF CURTOK<768 THEN IF CURCMD<2 THEN UNBALANCE:=UNBALANCE+1 ELSE BEGIN
UNBALANCE:=UNBALANCE-1;IF UNBALANCE=0 THEN GOTO 40;
END ELSE IF CURCMD=6 THEN{454:}BEGIN S:=CURTOK;GETTOKEN;
IF CURCMD<>6 THEN IF(CURCHR<49)OR(CURCHR>T-3072)OR(CURCMD<>12)THEN BEGIN
PRINTNL(574);SPRINTCS(WARNINGINDEX);BEGIN HELPPTR:=3;HELPLINE[2]:=575;
HELPLINE[1]:=576;HELPLINE[0]:=577;END;BACKERROR;CURTOK:=S;
END ELSE CURTOK:=1232+CURCHR;END{:454};BEGIN Q:=GETAVAIL;
MEM[P].HH.RH:=Q;MEM[Q].HH.LH:=CURTOK;P:=Q;END;END{:452};
40:SCANNERSTATU:=0;IF HASHBRACE<>0 THEN BEGIN Q:=GETAVAIL;
MEM[P].HH.RH:=Q;MEM[Q].HH.LH:=HASHBRACE;P:=Q;END;SCANTOKS:=P;END;{:448}
{457:}PROCEDURE READTOKS(N:SMALLNUMBER;R:HALFWORD);VAR P:HALFWORD;
Q:HALFWORD;S:INTEGER;BEGIN BEGINFILEREA;CURINPUT.NAMEFIELD:=N+1;
IF READOPEN[N]=2 THEN{458:}IF INTERACTION>1 THEN BEGIN PRINTLN;
SPRINTCS(R);BEGIN PRINT(61);TERMINPUT;END;END ELSE FATALERROR(578){:458}
ELSE IF READOPEN[N]=1 THEN{459:}
BEGIN IF EOLN(READFILE[N])THEN LAST:=CURINPUT.STARTFIELD ELSE BEGIN
BUFFER[CURINPUT.STARTFIELD]:=XORD[READFILE[N]↑];
FIRST:=CURINPUT.STARTFIELD+1;
IF NOT INPUTLN(READFILE[N])THEN CONFUSION(356);
IF(LAST-CURINPUT.STARTFIELD=29)AND(BUFFER[CURINPUT.STARTFIELD]=67)AND(
BUFFER[CURINPUT.STARTFIELD+8]=22)THEN BEGIN WHILE(READFILE[N]↑<>CHR(12))
AND(NOT EOF(READFILE[N]))DO BEGIN READLN(READFILE[N]);
READ(READFILE[N],AUXBUF:TEMPPTR);END;BUFFER[CURINPUT.STARTFIELD]:=12;
LAST:=CURINPUT.STARTFIELD+1;END;END;READOPEN[N]:=0;END{:459}ELSE{460:}
BEGIN IF NOT INPUTLN(READFILE[N])THEN BEGIN ACLOSE(READFILE[N]);
READOPEN[N]:=2;LAST:=CURINPUT.STARTFIELD;END;END{:460};
CURINPUT.LIMITFIELD:=LAST;BUFFER[CURINPUT.LIMITFIELD]:=13;
FIRST:=CURINPUT.LIMITFIELD+1;CURINPUT.LOCFIELD:=CURINPUT.STARTFIELD;
CURINPUT.STATEFIELD:=33;S:=ALIGNSTATE;ALIGNSTATE:=1000000;P:=25004;
MEM[P].HH.RH:=0;BEGIN Q:=GETAVAIL;MEM[P].HH.RH:=Q;MEM[Q].HH.LH:=0;P:=Q;
END;CURTOK:=3584;REPEAT BEGIN Q:=GETAVAIL;MEM[P].HH.RH:=Q;
MEM[Q].HH.LH:=CURTOK;P:=Q;END;GETTOKEN;UNTIL CURTOK=0;ENDFILEREADI;
CURVAL:=MEM[25004].HH.RH;ALIGNSTATE:=S;END;{:457}{468:}
PROCEDURE PASSTEXT;LABEL 30;VAR L:INTEGER;SAVESCANNERS:SMALLNUMBER;
BEGIN SAVESCANNERS:=SCANNERSTATU;SCANNERSTATU:=1;L:=0;SKIPLINE:=LINE;
SKIPPAGE:=PAGE;WHILE TRUE DO BEGIN GETNEXT;
IF CURCMD=102 THEN BEGIN IF L=0 THEN GOTO 30;IF CURCHR=2 THEN L:=L-1;
END ELSE IF CURCMD=101 THEN L:=L+1;END;30:SCANNERSTATU:=SAVESCANNERS;
END;{:468}{469:}PROCEDURE CONDITIONAL;LABEL 10,50;VAR B:BOOLEAN;
R:60..62;M,N:INTEGER;P,Q:HALFWORD;SAVESCANNERS:SMALLNUMBER;BEGIN{471:}
BEGIN IF EQTB[3886].INT>1 THEN SHOWCURCMDCH;P:=GETNODE(2);
MEM[P].HH.RH:=CONDPTR;MEM[P].HH.B0:=IFLIMIT;MEM[P].HH.B1:=CURIF;
MEM[P+1].INT:=IFLINE;CONDPTR:=P;CURIF:=CURCHR;IFLIMIT:=1;IFLINE:=LINE;
END{:471};CASE CURIF OF 0,1:{477:}BEGIN GETXTOKEN;
IF(CURCMD>12)OR(CURCHR>127)THEN N:=256 ELSE BEGIN N:=CURCHR;M:=CURCMD;
GETXTOKEN;IF(CURCMD>12)OR(CURCHR>127)THEN N:=256;END;
IF N<256 THEN IF CURIF=0 THEN B:=(N=CURCHR)ELSE B:=(M=CURCMD)ELSE BEGIN
PRINTNL(601);BEGIN HELPPTR:=2;HELPLINE[1]:=602;HELPLINE[0]:=603;END;
BACKERROR;B:=FALSE;END;END{:477};2,3:{474:}
BEGIN IF CURIF=2 THEN SCANINT ELSE SCANDIMEN(FALSE,FALSE,FALSE);
N:=CURVAL;{384:}REPEAT GETXTOKEN;UNTIL CURCMD<>10{:384};
IF(CURTOK>=3132)AND(CURTOK<=3134)THEN R:=CURTOK-3072 ELSE BEGIN PRINTNL(
599);PRINTCMDCHR(101,CURIF);BEGIN HELPPTR:=1;HELPLINE[0]:=600;END;
BACKERROR;R:=61;END;
IF CURIF=2 THEN SCANINT ELSE SCANDIMEN(FALSE,FALSE,FALSE);
CASE R OF 60:B:=(N<CURVAL);61:B:=(N=CURVAL);62:B:=(N>CURVAL);END;
END{:474};4:{475:}BEGIN SCANEIGHTBIT;B:=NOT ODD(EQTB[3893+CURVAL].INT);
END{:475};5:B:=(ABS(CURLIST.MODEFIELD)=1);
6:B:=(ABS(CURLIST.MODEFIELD)=99);7:B:=(ABS(CURLIST.MODEFIELD)=197);
8:B:=(CURLIST.MODEFIELD<0);9:{476:}BEGIN SCANEIGHTBIT;
B:=(EQTB[2904+CURVAL].HH.RH=0);END{:476};10:{478:}
BEGIN SAVESCANNERS:=SCANNERSTATU;SCANNERSTATU:=0;GETTOKEN;N:=CSPTR;
P:=CURCMD;Q:=CURCHR;GETTOKEN;
IF CURCMD<>P THEN B:=FALSE ELSE IF CURCMD<106 THEN B:=(CURCHR=Q)ELSE{479
:}BEGIN P:=MEM[CURCHR].HH.RH;Q:=MEM[EQTB[N].HH.RH].HH.RH;
WHILE(P<>0)AND(Q<>0)DO IF MEM[P].HH.LH<>MEM[Q].HH.LH THEN P:=0 ELSE
BEGIN P:=MEM[P].HH.RH;Q:=MEM[Q].HH.RH;END;B:=((P=0)AND(Q=0));END{:479};
SCANNERSTATU:=SAVESCANNERS;END{:478};11:BEGIN SCANFOURBITI;
B:=(READOPEN[CURVAL]=2);END;12:{480:}BEGIN SCANINT;N:=CURVAL;
IF EQTB[3886].INT>1 THEN BEGIN BEGINDIAGNOS;PRINT(604);PRINTINT(N);
PRINTCHAR(125);ENDDIAGNOSTI(FALSE);END;WHILE N<>0 DO BEGIN PASSTEXT;
IF CURCHR<>4 THEN GOTO 50;N:=N-1;END;IFLIMIT:=4;GOTO 10;END{:480};END;
IF EQTB[3886].INT>1 THEN{473:}BEGIN BEGINDIAGNOS;
IF B THEN PRINT(597)ELSE PRINT(598);ENDDIAGNOSTI(FALSE);END{:473};
IF B THEN BEGIN IFLIMIT:=3;GOTO 10;END;{470:}
WHILE TRUE DO BEGIN PASSTEXT;IF CURCHR<>4 THEN GOTO 50;PRINTNL(595);
BEGIN HELPPTR:=1;HELPLINE[0]:=596;END;END{:470};
50:IF CURCHR=2 THEN{472:}BEGIN P:=CONDPTR;IFLINE:=MEM[P+1].INT;
CURIF:=MEM[P].HH.B1;IFLIMIT:=MEM[P].HH.B0;CONDPTR:=MEM[P].HH.RH;
FREENODE(P,2);IF EQTB[3886].INT>1 THEN SHOWCURCMDCH;END{:472}
ELSE IFLIMIT:=2;10:END;{:469}{486:}PROCEDURE BEGINNAME;
BEGIN AREADELIMITE:=0;EXTDELIMITER:=0;END;{:486}{487:}
FUNCTION MORENAME(C:ASCIICODE):BOOLEAN;
BEGIN IF C=32 THEN MORENAME:=FALSE ELSE BEGIN IF C=91 THEN AREADELIMITE
:=POOLPTR ELSE IF C=46 THEN EXTDELIMITER:=POOLPTR;
BEGIN IF POOLPTR+1>POOLSIZE THEN OVERFLOW(129,POOLSIZE);END;
BEGIN STRPOOL[POOLPTR]:=C;POOLPTR:=POOLPTR+1;END;MORENAME:=TRUE;END;END;
{:487}{488:}PROCEDURE ENDNAME;
BEGIN IF STRPTR+3>MAXSTRINGS THEN OVERFLOW(130,MAXSTRINGS);
CURNAME:=STRPTR;
IF EXTDELIMITER=0 THEN CUREXT:=228 ELSE BEGIN STRPTR:=STRPTR+1;
STRSTART[STRPTR]:=EXTDELIMITER;CUREXT:=STRPTR;END;
IF AREADELIMITE<=STRSTART[STRPTR]THEN BEGIN CURAREA:=228;
STRPTR:=STRPTR+1;STRSTART[STRPTR]:=POOLPTR;
END ELSE BEGIN STRPTR:=STRPTR+1;STRSTART[STRPTR]:=AREADELIMITE;
CURAREA:=MAKESTRING;END;END;{:488}{490:}
PROCEDURE PACKFILENAME(N,A,E:STRNUMBER);VAR K:INTEGER;C:ASCIICODE;
J:POOLPOINTER;BEGIN K:=0;
IF(E=607)AND((STRSTART[N+1]-STRSTART[N])>6)THEN BEGIN FOR J:=STRSTART[N]
TO STRSTART[N]+2 DO BEGIN C:=STRPOOL[J];K:=K+1;
IF(C>=97)AND(C<=122)THEN C:=C-32;
IF K<=FILENAMESIZE THEN NAMEOFFILE[K]:=XCHR[C];END;
FOR J:=STRSTART[N+1]-3 TO STRSTART[N+1]-1 DO BEGIN C:=STRPOOL[J];K:=K+1;
IF(C>=97)AND(C<=122)THEN C:=C-32;
IF K<=FILENAMESIZE THEN NAMEOFFILE[K]:=XCHR[C];END;
END ELSE FOR J:=STRSTART[N]TO STRSTART[N+1]-1 DO BEGIN C:=STRPOOL[J];
K:=K+1;IF(C>=97)AND(C<=122)THEN C:=C-32;
IF K<=FILENAMESIZE THEN NAMEOFFILE[K]:=XCHR[C];END;
FOR J:=STRSTART[E]TO STRSTART[E+1]-1 DO BEGIN C:=STRPOOL[J];K:=K+1;
IF(C>=97)AND(C<=122)THEN C:=C-32;
IF K<=FILENAMESIZE THEN NAMEOFFILE[K]:=XCHR[C];END;
FOR J:=STRSTART[A]TO STRSTART[A+1]-1 DO BEGIN C:=STRPOOL[J];K:=K+1;
IF(C>=97)AND(C<=122)THEN C:=C-32;
IF K<=FILENAMESIZE THEN NAMEOFFILE[K]:=XCHR[C];END;
IF K<=FILENAMESIZE THEN NAMELENGTH:=K ELSE NAMELENGTH:=FILENAMESIZE;
FOR K:=NAMELENGTH+1 TO FILENAMESIZE DO NAMEOFFILE[K]:=' ';END;{:490}
{494:}PROCEDURE PACKBUFFERED(N:SMALLNUMBER;A,B:INTEGER);VAR K:INTEGER;
C:ASCIICODE;J:INTEGER;D:INTEGER;
BEGIN IF N+B-A+5>FILENAMESIZE THEN B:=A+FILENAMESIZE-N-5;K:=0;
FOR J:=A TO B DO BEGIN C:=BUFFER[J];K:=K+1;
IF(C>=97)AND(C<=122)THEN C:=C-32;
IF K<=FILENAMESIZE THEN NAMEOFFILE[K]:=XCHR[C];END;
IF B=0 THEN BEGIN D:=10;N:=18;END ELSE D:=6;
FOR J:=D TO 9 DO BEGIN C:=XORD[TEXFORMATDEF[J]];K:=K+1;
IF(C>=97)AND(C<=122)THEN C:=C-32;
IF K<=FILENAMESIZE THEN NAMEOFFILE[K]:=XCHR[C];END;
FOR J:=18-N+1 TO 18 DO BEGIN C:=XORD[TEXFORMATDEF[J]];K:=K+1;
IF(C>=97)AND(C<=122)THEN C:=C-32;
IF K<=FILENAMESIZE THEN NAMEOFFILE[K]:=XCHR[C];END;
IF K<=FILENAMESIZE THEN NAMELENGTH:=K ELSE NAMELENGTH:=FILENAMESIZE;
FOR K:=NAMELENGTH+1 TO FILENAMESIZE DO NAMEOFFILE[K]:=' ';END;{:494}
{496:}PROCEDURE CURNAM(VAR CHAN:FILE;VAR S:STRING);EXTERN;
FUNCTION MAKENAMESTRI(VAR F:FILE):STRNUMBER;
VAR S:PACKED ARRAY[1..24]OF CHAR;K:1..24;BEGIN CURNAM(F,S);
BEGIN IF POOLPTR+24>POOLSIZE THEN OVERFLOW(129,POOLSIZE);END;K:=1;
WHILE ORD(S[K])<>0 DO BEGIN BEGIN STRPOOL[POOLPTR]:=XORD[S[K]];
POOLPTR:=POOLPTR+1;END;K:=K+1;END;MAKENAMESTRI:=MAKESTRING;END;
FUNCTION AMAKENAMESTR(VAR F:ALPHAFILE):STRNUMBER;
BEGIN AMAKENAMESTR:=MAKENAMESTRI(F);END;
FUNCTION BMAKENAMESTR(VAR F:BYTEFILE):STRNUMBER;
BEGIN BMAKENAMESTR:=MAKENAMESTRI(F);END;
FUNCTION WMAKENAMESTR(VAR F:WORDFILE):STRNUMBER;
BEGIN WMAKENAMESTR:=MAKENAMESTRI(F);END;{:496}{497:}
PROCEDURE SCANFILENAME;LABEL 30;BEGIN NAMEINPROGRE:=TRUE;BEGINNAME;
{384:}REPEAT GETXTOKEN;UNTIL CURCMD<>10{:384};
WHILE TRUE DO BEGIN IF(CURCMD>12)OR(CURCHR>127)THEN BEGIN BACKINPUT;
GOTO 30;END;IF NOT MORENAME(CURCHR)THEN GOTO 30;GETXTOKEN;END;
30:ENDNAME;NAMEINPROGRE:=FALSE;END;{:497}{500:}
PROCEDURE PACKJOBNAME(S:STRNUMBER);BEGIN CURAREA:=228;CUREXT:=S;
CURNAME:=JOBNAME;PACKFILENAME(CURNAME,CURAREA,CUREXT);END;{:500}{501:}
PROCEDURE PROMPTFILENA(S,E:STRNUMBER);LABEL 30;VAR K:0..BUFSIZE;
BEGIN IF S=608 THEN PRINTNL(609)ELSE PRINTNL(610);
PRINTFILENAM(CURNAME,CURAREA,CUREXT);PRINT(611);
IF E=612 THEN SHOWCONTEXT;PRINTNL(613);PRINT(S);
IF INTERACTION<2 THEN FATALERROR(614);BREAKIN(TTY,TRUE);
BEGIN PRINT(392);TERMINPUT;END;{502:}BEGIN NAMEINPROGRE:=TRUE;BEGINNAME;
K:=FIRST;WHILE(BUFFER[K]=32)AND(K<LAST)DO K:=K+1;
WHILE TRUE DO BEGIN IF K=LAST THEN GOTO 30;
IF NOT MORENAME(BUFFER[K])THEN GOTO 30;K:=K+1;END;30:ENDNAME;
NAMEINPROGRE:=FALSE;END{:502};IF CUREXT=228 THEN CUREXT:=E;
PACKFILENAME(CURNAME,CURAREA,CUREXT);END;{:501}{505:}
PROCEDURE OPENLOGFILE;VAR OLDSETTING:0..21;K:0..BUFSIZE;
MONTHS:PACKED ARRAY[1..36]OF CHAR;BEGIN OLDSETTING:=SELECTOR;
IF JOBNAME=0 THEN JOBNAME:=617;PACKJOBNAME(618);
WHILE NOT AOPENOUT(LOGFILE)DO{506:}
BEGIN IF INTERACTION<2 THEN BEGIN PRINTNL(610);
PRINTFILENAM(CURNAME,CURAREA,CUREXT);PRINT(611);JOBNAME:=0;HISTORY:=3;
JUMPOUT;END;PROMPTFILENA(620,618);END{:506};SELECTOR:=18;{507:}
BEGIN WRITE(LOGFILE,'This is TeX, WAITS Version 0.95');
PRINT(FORMATIDENT);PRINT(621);PRINTINT(EQTB[3871].INT);PRINTCHAR(32);
MONTHS:='JANFEBMARAPRMAYJUNJULAUGSEPOCTNOVDEC';
FOR K:=3*EQTB[3872].INT-2 TO 3*EQTB[3872].INT DO WRITE(LOGFILE,MONTHS[K]
);PRINTCHAR(32);PRINTINT(EQTB[3873].INT);PRINTCHAR(32);
PRINTTWO(EQTB[3870].INT DIV 60);PRINTCHAR(58);
PRINTTWO(EQTB[3870].INT MOD 60);END{:507};
INPUTSTACK[INPUTPTR]:=CURINPUT;PRINTNL(619);
FOR K:=1 TO INPUTSTACK[0].LIMITFIELD DO PRINT(BUFFER[K-1]);PRINTLN;
SELECTOR:=OLDSETTING+2;END;{:505}{508:}PROCEDURE STARTINPUT;LABEL 30;
BEGIN SCANFILENAME;IF CUREXT=228 THEN CUREXT:=612;
PACKFILENAME(CURNAME,CURAREA,CUREXT);WHILE TRUE DO BEGIN BEGINFILEREA;
IF AOPENIN(INPUTFILE[CURINPUT.INDEXFIELD])THEN GOTO 30;
PACKFILENAME(CURNAME,606,CUREXT);
IF AOPENIN(INPUTFILE[CURINPUT.INDEXFIELD])THEN GOTO 30;ENDFILEREADI;
PROMPTFILENA(608,612);END;
30:CURINPUT.NAMEFIELD:=AMAKENAMESTR(INPUTFILE[CURINPUT.INDEXFIELD]);
CURINPUT.STATEFIELD:=33;IF JOBNAME=0 THEN BEGIN JOBNAME:=CURNAME;
OPENLOGFILE;END;
IF TERMOFFSET+(STRSTART[CURINPUT.NAMEFIELD+1]-STRSTART[CURINPUT.
NAMEFIELD])>MAXPRINTLINE-2 THEN PRINTLN ELSE IF(TERMOFFSET>0)OR(
FILEOFFSET>0)THEN PRINTCHAR(32);PRINTCHAR(40);PRINT(CURINPUT.NAMEFIELD);
BREAK(TTY);{509:}
BEGIN IF EOLN(INPUTFILE[CURINPUT.INDEXFIELD])THEN LAST:=CURINPUT.
STARTFIELD ELSE BEGIN BUFFER[CURINPUT.STARTFIELD]:=XORD[INPUTFILE[
CURINPUT.INDEXFIELD]↑];FIRST:=CURINPUT.STARTFIELD+1;
IF NOT INPUTLN(INPUTFILE[CURINPUT.INDEXFIELD])THEN CONFUSION(451);
IF(LAST-CURINPUT.STARTFIELD=29)AND(BUFFER[CURINPUT.STARTFIELD]=67)AND(
BUFFER[CURINPUT.STARTFIELD+8]=22)THEN BEGIN WHILE(INPUTFILE[CURINPUT.
INDEXFIELD]↑<>CHR(12))AND(NOT EOF(INPUTFILE[CURINPUT.INDEXFIELD]))DO
BEGIN READLN(INPUTFILE[CURINPUT.INDEXFIELD]);
READ(INPUTFILE[CURINPUT.INDEXFIELD],AUXBUF:TEMPPTR);END;
BUFFER[CURINPUT.STARTFIELD]:=12;LAST:=CURINPUT.STARTFIELD+1;END;END;
FIRMUPTHELIN;BUFFER[CURINPUT.LIMITFIELD]:=13;
FIRST:=CURINPUT.LIMITFIELD+1;CURINPUT.LOCFIELD:=CURINPUT.STARTFIELD;
LINE:=1;PAGE:=1;END{:509};END;{:508}{531:}
FUNCTION READFONTINFO(U:HALFWORD;NOM,AIRE:STRNUMBER;
S:SCALED):INTERNALFONT;LABEL 30,11,45;VAR K:0..FONTMEMSIZE;
FILEOPENED:BOOLEAN;LF,LH,BC,EC,NW,NH,ND,NI,NL,NK,NE,NP:HALFWORD;
F:INTERNALFONT;G:INTERNALFONT;A,B,C,D:EIGHTBITS;QW:FOURQUARTERS;
SW:SCALED;Z:SCALED;ALPHA:INTEGER;BETA:1..16;BEGIN G:=0;{533:}{534:}
FILEOPENED:=FALSE;
IF AIRE=228 THEN PACKFILENAME(NOM,606,607)ELSE PACKFILENAME(NOM,AIRE,607
);IF NOT BOPENIN(TFMFILE)THEN GOTO 11;FILEOPENED:=TRUE{:534};{536:}
BEGIN BEGIN LF:=TFMFILE↑;IF LF>127 THEN GOTO 11;GET(TFMFILE);
LF:=LF*256+TFMFILE↑;END;GET(TFMFILE);BEGIN LH:=TFMFILE↑;
IF LH>127 THEN GOTO 11;GET(TFMFILE);LH:=LH*256+TFMFILE↑;END;
GET(TFMFILE);BEGIN BC:=TFMFILE↑;IF BC>127 THEN GOTO 11;GET(TFMFILE);
BC:=BC*256+TFMFILE↑;END;GET(TFMFILE);BEGIN EC:=TFMFILE↑;
IF EC>127 THEN GOTO 11;GET(TFMFILE);EC:=EC*256+TFMFILE↑;END;
IF(BC>EC+1)OR(EC>255)THEN GOTO 11;GET(TFMFILE);BEGIN NW:=TFMFILE↑;
IF NW>127 THEN GOTO 11;GET(TFMFILE);NW:=NW*256+TFMFILE↑;END;
GET(TFMFILE);BEGIN NH:=TFMFILE↑;IF NH>127 THEN GOTO 11;GET(TFMFILE);
NH:=NH*256+TFMFILE↑;END;GET(TFMFILE);BEGIN ND:=TFMFILE↑;
IF ND>127 THEN GOTO 11;GET(TFMFILE);ND:=ND*256+TFMFILE↑;END;
GET(TFMFILE);BEGIN NI:=TFMFILE↑;IF NI>127 THEN GOTO 11;GET(TFMFILE);
NI:=NI*256+TFMFILE↑;END;GET(TFMFILE);BEGIN NL:=TFMFILE↑;
IF NL>127 THEN GOTO 11;GET(TFMFILE);NL:=NL*256+TFMFILE↑;END;
GET(TFMFILE);BEGIN NK:=TFMFILE↑;IF NK>127 THEN GOTO 11;GET(TFMFILE);
NK:=NK*256+TFMFILE↑;END;GET(TFMFILE);BEGIN NE:=TFMFILE↑;
IF NE>127 THEN GOTO 11;GET(TFMFILE);NE:=NE*256+TFMFILE↑;END;
GET(TFMFILE);BEGIN NP:=TFMFILE↑;IF NP>127 THEN GOTO 11;GET(TFMFILE);
NP:=NP*256+TFMFILE↑;END;
IF LF<>6+LH+(EC-BC+1)+NW+NH+ND+NI+NL+NK+NE+NP THEN GOTO 11;END{:536};
{537:}LF:=LF-6-LH;IF NP<7 THEN LF:=LF+7-NP;
IF(FONTPTR=FONTMAX)OR(FMEMPTR+LF>FONTMEMSIZE)THEN{538:}
BEGIN PRINTNL(623);SPRINTCS(U);PRINTCHAR(61);PRINTFILENAM(NOM,AIRE,228);
IF S<>0 THEN BEGIN PRINT(563);PRINTSCALED(S);PRINT(527);END;PRINT(631);
BEGIN HELPPTR:=4;HELPLINE[3]:=632;HELPLINE[2]:=633;HELPLINE[1]:=634;
HELPLINE[0]:=635;END;ERROR;GOTO 30;END{:538};F:=FONTPTR+1;
CHARBASE[F]:=FMEMPTR-BC;WIDTHBASE[F]:=CHARBASE[F]+EC+1;
HEIGHTBASE[F]:=WIDTHBASE[F]+NW;DEPTHBASE[F]:=HEIGHTBASE[F]+NH;
ITALICBASE[F]:=DEPTHBASE[F]+ND;LIGKERNBASE[F]:=ITALICBASE[F]+NI;
KERNBASE[F]:=LIGKERNBASE[F]+NL;EXTENBASE[F]:=KERNBASE[F]+NK;
PARAMBASE[F]:=EXTENBASE[F]+NE{:537};{539:}BEGIN IF LH<2 THEN GOTO 11;
BEGIN GET(TFMFILE);A:=TFMFILE↑;QW.B0:=A;GET(TFMFILE);B:=TFMFILE↑;
QW.B1:=B;GET(TFMFILE);C:=TFMFILE↑;QW.B2:=C;GET(TFMFILE);D:=TFMFILE↑;
QW.B3:=D;FONTCHECK[F]:=QW;END;GET(TFMFILE);BEGIN Z:=TFMFILE↑;
IF Z>127 THEN GOTO 11;GET(TFMFILE);Z:=Z*256+TFMFILE↑;END;GET(TFMFILE);
Z:=Z*256+TFMFILE↑;GET(TFMFILE);Z:=(Z*16)+(TFMFILE↑DIV 16);
IF Z<65536 THEN GOTO 11;WHILE LH>2 DO BEGIN GET(TFMFILE);GET(TFMFILE);
GET(TFMFILE);GET(TFMFILE);LH:=LH-1;END;FONTDSIZE[F]:=Z;
IF S<>0 THEN Z:=S;FONTSIZE[F]:=Z;END{:539};{540:}
FOR K:=FMEMPTR TO WIDTHBASE[F]-1 DO BEGIN BEGIN GET(TFMFILE);
A:=TFMFILE↑;QW.B0:=A;GET(TFMFILE);B:=TFMFILE↑;QW.B1:=B;GET(TFMFILE);
C:=TFMFILE↑;QW.B2:=C;GET(TFMFILE);D:=TFMFILE↑;QW.B3:=D;
FONTINFO[K].QQQQ:=QW;END;
IF(A>=NW)OR(B DIV 16>=NH)OR(B MOD 16>=ND)OR(C DIV 4>=NI)THEN GOTO 11;
CASE C MOD 4 OF 1:IF D>=NL THEN GOTO 11;3:IF D>=NE THEN GOTO 11;2:{541:}
BEGIN BEGIN IF(D<BC)OR(D>EC)THEN GOTO 11 END;
WHILE D<K+BC-FMEMPTR DO BEGIN QW:=FONTINFO[CHARBASE[F]+D].QQQQ;
IF(QW.B2 MOD 4)<>2 THEN GOTO 45;D:=QW.B3;END;
IF D=K+BC-FMEMPTR THEN GOTO 11;45:END{:541};OTHERS:END;END{:540};{542:}
BEGIN{543:}BEGIN ALPHA:=16*Z;BETA:=16;
WHILE Z>=8388608 DO BEGIN Z:=Z DIV 2;BETA:=BETA DIV 2;END;END{:543};
FOR K:=WIDTHBASE[F]TO LIGKERNBASE[F]-1 DO BEGIN GET(TFMFILE);
A:=TFMFILE↑;GET(TFMFILE);B:=TFMFILE↑;GET(TFMFILE);C:=TFMFILE↑;
GET(TFMFILE);D:=TFMFILE↑;
SW:=(((((D*Z)DIV 256)+(C*Z))DIV 256)+(B*Z))DIV BETA;
IF A=0 THEN FONTINFO[K].INT:=SW ELSE IF A=255 THEN FONTINFO[K].INT:=SW-
ALPHA ELSE GOTO 11;END;IF FONTINFO[WIDTHBASE[F]].INT<>0 THEN GOTO 11;
IF FONTINFO[HEIGHTBASE[F]].INT<>0 THEN GOTO 11;
IF FONTINFO[DEPTHBASE[F]].INT<>0 THEN GOTO 11;
IF FONTINFO[ITALICBASE[F]].INT<>0 THEN GOTO 11;END{:542};{544:}
BEGIN FOR K:=LIGKERNBASE[F]TO KERNBASE[F]-1 DO BEGIN BEGIN GET(TFMFILE);
A:=TFMFILE↑;QW.B0:=A;GET(TFMFILE);B:=TFMFILE↑;QW.B1:=B;GET(TFMFILE);
C:=TFMFILE↑;QW.B2:=C;GET(TFMFILE);D:=TFMFILE↑;QW.B3:=D;
FONTINFO[K].QQQQ:=QW;END;BEGIN IF(B<BC)OR(B>EC)THEN GOTO 11 END;
IF C<128 THEN BEGIN IF(D<BC)OR(D>EC)THEN GOTO 11 END ELSE IF D>=NK THEN
GOTO 11;END;IF(NL>0)AND(A<128)THEN GOTO 11;
FOR K:=KERNBASE[F]TO EXTENBASE[F]-1 DO BEGIN GET(TFMFILE);A:=TFMFILE↑;
GET(TFMFILE);B:=TFMFILE↑;GET(TFMFILE);C:=TFMFILE↑;GET(TFMFILE);
D:=TFMFILE↑;SW:=(((((D*Z)DIV 256)+(C*Z))DIV 256)+(B*Z))DIV BETA;
IF A=0 THEN FONTINFO[K].INT:=SW ELSE IF A=255 THEN FONTINFO[K].INT:=SW-
ALPHA ELSE GOTO 11;END;END{:544};{545:}
FOR K:=EXTENBASE[F]TO PARAMBASE[F]-1 DO BEGIN BEGIN GET(TFMFILE);
A:=TFMFILE↑;QW.B0:=A;GET(TFMFILE);B:=TFMFILE↑;QW.B1:=B;GET(TFMFILE);
C:=TFMFILE↑;QW.B2:=C;GET(TFMFILE);D:=TFMFILE↑;QW.B3:=D;
FONTINFO[K].QQQQ:=QW;END;
IF A<>0 THEN BEGIN IF(A<BC)OR(A>EC)THEN GOTO 11 END;
IF B<>0 THEN BEGIN IF(B<BC)OR(B>EC)THEN GOTO 11 END;
IF C<>0 THEN BEGIN IF(C<BC)OR(C>EC)THEN GOTO 11 END;
BEGIN IF(D<BC)OR(D>EC)THEN GOTO 11 END;END{:545};{546:}
BEGIN FOR K:=1 TO NP DO IF K=1 THEN BEGIN GET(TFMFILE);SW:=TFMFILE↑;
IF SW>127 THEN SW:=SW-256;GET(TFMFILE);SW:=SW*256+TFMFILE↑;GET(TFMFILE);
SW:=SW*256+TFMFILE↑;GET(TFMFILE);
FONTINFO[PARAMBASE[F]].INT:=(SW*16)+(TFMFILE↑DIV 16);
END ELSE BEGIN GET(TFMFILE);A:=TFMFILE↑;GET(TFMFILE);B:=TFMFILE↑;
GET(TFMFILE);C:=TFMFILE↑;GET(TFMFILE);D:=TFMFILE↑;
SW:=(((((D*Z)DIV 256)+(C*Z))DIV 256)+(B*Z))DIV BETA;
IF A=0 THEN FONTINFO[PARAMBASE[F]+K-1].INT:=SW ELSE IF A=255 THEN
FONTINFO[PARAMBASE[F]+K-1].INT:=SW-ALPHA ELSE GOTO 11;END;
IF EOF(TFMFILE)THEN GOTO 11;
FOR K:=NP+1 TO 7 DO FONTINFO[PARAMBASE[F]+K-1].INT:=0;END{:546};{547:}
IF NP>=7 THEN FONTPARAMS[F]:=NP ELSE FONTPARAMS[F]:=7;FONTNAME[F]:=NOM;
FONTAREA[F]:=AIRE;FONTBC[F]:=BC;FONTEC[F]:=EC;FONTGLUE[F]:=0;
CHARBASE[F]:=CHARBASE[F];WIDTHBASE[F]:=WIDTHBASE[F];
LIGKERNBASE[F]:=LIGKERNBASE[F];KERNBASE[F]:=KERNBASE[F];
EXTENBASE[F]:=EXTENBASE[F];PARAMBASE[F]:=PARAMBASE[F]-1;
FMEMPTR:=FMEMPTR+LF;FONTPTR:=F;G:=F;GOTO 30{:547}{:533};11:{532:}
PRINTNL(623);SPRINTCS(U);PRINTCHAR(61);PRINTFILENAM(NOM,AIRE,228);
IF S<>0 THEN BEGIN PRINT(563);PRINTSCALED(S);PRINT(527);END;
IF FILEOPENED THEN PRINT(624)ELSE PRINT(625);BEGIN HELPPTR:=5;
HELPLINE[4]:=626;HELPLINE[3]:=627;HELPLINE[2]:=628;HELPLINE[1]:=629;
HELPLINE[0]:=630;END;ERROR{:532};30:BCLOSE(TFMFILE);READFONTINFO:=G;END;
{:531}{552:}PROCEDURE CHARWARNING(F:INTERNALFONT;C:EIGHTBITS);
BEGIN IF EQTB[3885].INT<>0 THEN BEGIN BEGINDIAGNOS;PRINTNL(644);
PRINTASCII(C);PRINT(645);PRINT(FONTNAME[F]);PRINTCHAR(33);
ENDDIAGNOSTI(FALSE);END;END;{:552}{553:}
FUNCTION NEWCHARACTER(F:INTERNALFONT;C:EIGHTBITS):HALFWORD;LABEL 10;
VAR P:HALFWORD;
BEGIN IF(FONTBC[F]<=C)AND(FONTEC[F]>=C)THEN IF(FONTINFO[CHARBASE[F]+C].
QQQQ.B0>0)THEN BEGIN P:=GETAVAIL;MEM[P].HH.B0:=F;MEM[P].HH.B1:=C;
NEWCHARACTER:=P;GOTO 10;END;CHARWARNING(F,C);NEWCHARACTER:=0;10:END;
{:553}{568:}PROCEDURE ARYOUT(VAR F:FILE;B:PACKEDBYTES;O,C:INTEGER);
EXTERN;PROCEDURE WRITEDVI(A,B:DVIINDEX);
BEGIN ARYOUT(DVIFILE,DVIBUF,A DIV 4,(B+1-A)DIV 4);END;{:568}{569:}
PROCEDURE DVISWAP;
BEGIN IF DVILIMIT=DVIBUFSIZE THEN BEGIN WRITEDVI(0,HALFBUF-1);
DVILIMIT:=HALFBUF;DVIOFFSET:=DVIOFFSET+DVIBUFSIZE;DVIPTR:=0;
END ELSE BEGIN WRITEDVI(HALFBUF,DVIBUFSIZE-1);DVILIMIT:=DVIBUFSIZE;END;
DVIGONE:=DVIGONE+HALFBUF;END;{:569}{571:}PROCEDURE DVIFOUR(X:INTEGER);
BEGIN IF X>=0 THEN BEGIN DVIBUF[DVIPTR]:=X DIV 16777216;
DVIPTR:=DVIPTR+1;IF DVIPTR=DVILIMIT THEN DVISWAP;
END ELSE BEGIN X:=X+1073741824;X:=X+1073741824;
BEGIN DVIBUF[DVIPTR]:=(X DIV 16777216)+128;DVIPTR:=DVIPTR+1;
IF DVIPTR=DVILIMIT THEN DVISWAP;END;END;X:=X MOD 16777216;
BEGIN DVIBUF[DVIPTR]:=X DIV 65536;DVIPTR:=DVIPTR+1;
IF DVIPTR=DVILIMIT THEN DVISWAP;END;X:=X MOD 65536;
BEGIN DVIBUF[DVIPTR]:=X DIV 256;DVIPTR:=DVIPTR+1;
IF DVIPTR=DVILIMIT THEN DVISWAP;END;BEGIN DVIBUF[DVIPTR]:=X MOD 256;
DVIPTR:=DVIPTR+1;IF DVIPTR=DVILIMIT THEN DVISWAP;END;END;{:571}{572:}
PROCEDURE DVIPOP(L:INTEGER);
BEGIN IF(L=DVIOFFSET+DVIPTR)AND(DVIPTR>0)THEN DVIPTR:=DVIPTR-1 ELSE
BEGIN DVIBUF[DVIPTR]:=142;DVIPTR:=DVIPTR+1;
IF DVIPTR=DVILIMIT THEN DVISWAP;END;END;{:572}{573:}
PROCEDURE DVIFONTDEF(F:INTERNALFONT);VAR K:POOLPOINTER;
BEGIN BEGIN DVIBUF[DVIPTR]:=243;DVIPTR:=DVIPTR+1;
IF DVIPTR=DVILIMIT THEN DVISWAP;END;BEGIN DVIBUF[DVIPTR]:=F-1;
DVIPTR:=DVIPTR+1;IF DVIPTR=DVILIMIT THEN DVISWAP;END;
BEGIN DVIBUF[DVIPTR]:=FONTCHECK[F].B0;DVIPTR:=DVIPTR+1;
IF DVIPTR=DVILIMIT THEN DVISWAP;END;
BEGIN DVIBUF[DVIPTR]:=FONTCHECK[F].B1;DVIPTR:=DVIPTR+1;
IF DVIPTR=DVILIMIT THEN DVISWAP;END;
BEGIN DVIBUF[DVIPTR]:=FONTCHECK[F].B2;DVIPTR:=DVIPTR+1;
IF DVIPTR=DVILIMIT THEN DVISWAP;END;
BEGIN DVIBUF[DVIPTR]:=FONTCHECK[F].B3;DVIPTR:=DVIPTR+1;
IF DVIPTR=DVILIMIT THEN DVISWAP;END;DVIFOUR(FONTSIZE[F]);
DVIFOUR(FONTDSIZE[F]);
BEGIN DVIBUF[DVIPTR]:=(STRSTART[FONTAREA[F]+1]-STRSTART[FONTAREA[F]]);
DVIPTR:=DVIPTR+1;IF DVIPTR=DVILIMIT THEN DVISWAP;END;
BEGIN DVIBUF[DVIPTR]:=(STRSTART[FONTNAME[F]+1]-STRSTART[FONTNAME[F]]);
DVIPTR:=DVIPTR+1;IF DVIPTR=DVILIMIT THEN DVISWAP;END;{574:}
FOR K:=STRSTART[FONTAREA[F]]TO STRSTART[FONTAREA[F]+1]-1 DO BEGIN DVIBUF
[DVIPTR]:=STRPOOL[K];DVIPTR:=DVIPTR+1;IF DVIPTR=DVILIMIT THEN DVISWAP;
END;
FOR K:=STRSTART[FONTNAME[F]]TO STRSTART[FONTNAME[F]+1]-1 DO BEGIN DVIBUF
[DVIPTR]:=STRPOOL[K];DVIPTR:=DVIPTR+1;IF DVIPTR=DVILIMIT THEN DVISWAP;
END{:574};END;{:573}{578:}PROCEDURE MOVEMENT(W:SCALED;O:EIGHTBITS);
LABEL 10,40,45,2,1;VAR MSTATE:SMALLNUMBER;P,Q:HALFWORD;K:INTEGER;
BEGIN Q:=GETNODE(3);MEM[Q+1].INT:=W;MEM[Q+2].INT:=DVIOFFSET+DVIPTR;
IF O=157 THEN BEGIN MEM[Q].HH.RH:=DOWNPTR;DOWNPTR:=Q;
END ELSE BEGIN MEM[Q].HH.RH:=RIGHTPTR;RIGHTPTR:=Q;END;{582:}
P:=MEM[Q].HH.RH;MSTATE:=0;
WHILE P<>0 DO BEGIN IF MEM[P+1].INT=W THEN{583:}
CASE MSTATE+MEM[P].HH.LH OF 3,4,15,16:IF MEM[P+2].INT<DVIGONE THEN GOTO
45 ELSE{584:}BEGIN K:=MEM[P+2].INT-DVIOFFSET;
IF K<0 THEN K:=K+DVIBUFSIZE;DVIBUF[K]:=DVIBUF[K]+5;MEM[P].HH.LH:=1;
GOTO 40;END{:584};5,9,11:IF MEM[P+2].INT<DVIGONE THEN GOTO 45 ELSE{585:}
BEGIN K:=MEM[P+2].INT-DVIOFFSET;IF K<0 THEN K:=K+DVIBUFSIZE;
DVIBUF[K]:=DVIBUF[K]+10;MEM[P].HH.LH:=2;GOTO 40;END{:585};
1,2,8,13:GOTO 40;OTHERS:END{:583}
ELSE CASE MSTATE+MEM[P].HH.LH OF 1:MSTATE:=6;2:MSTATE:=12;8,13:GOTO 45;
OTHERS:END;P:=MEM[P].HH.RH;END;45:{:582};{581:}MEM[Q].HH.LH:=3;
IF ABS(W)>=8388608 THEN BEGIN BEGIN DVIBUF[DVIPTR]:=O+3;
DVIPTR:=DVIPTR+1;IF DVIPTR=DVILIMIT THEN DVISWAP;END;DVIFOUR(W);GOTO 10;
END;IF ABS(W)>=32768 THEN BEGIN BEGIN DVIBUF[DVIPTR]:=O+2;
DVIPTR:=DVIPTR+1;IF DVIPTR=DVILIMIT THEN DVISWAP;END;
IF W<0 THEN W:=W+16777216;BEGIN DVIBUF[DVIPTR]:=W DIV 65536;
DVIPTR:=DVIPTR+1;IF DVIPTR=DVILIMIT THEN DVISWAP;END;W:=W MOD 65536;
GOTO 2;END;IF ABS(W)>=128 THEN BEGIN BEGIN DVIBUF[DVIPTR]:=O+1;
DVIPTR:=DVIPTR+1;IF DVIPTR=DVILIMIT THEN DVISWAP;END;
IF W<0 THEN W:=W+65536;GOTO 2;END;BEGIN DVIBUF[DVIPTR]:=O;
DVIPTR:=DVIPTR+1;IF DVIPTR=DVILIMIT THEN DVISWAP;END;
IF W<0 THEN W:=W+256;GOTO 1;2:BEGIN DVIBUF[DVIPTR]:=W DIV 256;
DVIPTR:=DVIPTR+1;IF DVIPTR=DVILIMIT THEN DVISWAP;END;
1:BEGIN DVIBUF[DVIPTR]:=W MOD 256;DVIPTR:=DVIPTR+1;
IF DVIPTR=DVILIMIT THEN DVISWAP;END;GOTO 10{:581};40:{580:}
MEM[Q].HH.LH:=MEM[P].HH.LH;
IF MEM[Q].HH.LH=1 THEN BEGIN BEGIN DVIBUF[DVIPTR]:=O+4;DVIPTR:=DVIPTR+1;
IF DVIPTR=DVILIMIT THEN DVISWAP;END;
WHILE MEM[Q].HH.RH<>P DO BEGIN Q:=MEM[Q].HH.RH;
CASE MEM[Q].HH.LH OF 3:MEM[Q].HH.LH:=5;4:MEM[Q].HH.LH:=6;OTHERS:END;END;
END ELSE BEGIN BEGIN DVIBUF[DVIPTR]:=O+9;DVIPTR:=DVIPTR+1;
IF DVIPTR=DVILIMIT THEN DVISWAP;END;
WHILE MEM[Q].HH.RH<>P DO BEGIN Q:=MEM[Q].HH.RH;
CASE MEM[Q].HH.LH OF 3:MEM[Q].HH.LH:=4;5:MEM[Q].HH.LH:=6;OTHERS:END;END;
END{:580};10:END;{:578}{586:}PROCEDURE PRUNEMOVEMEN(L:INTEGER);
LABEL 30,10;VAR P:HALFWORD;
BEGIN WHILE DOWNPTR<>0 DO BEGIN IF MEM[DOWNPTR+2].INT<L THEN GOTO 30;
P:=DOWNPTR;DOWNPTR:=MEM[P].HH.RH;FREENODE(P,3);END;
30:WHILE RIGHTPTR<>0 DO BEGIN IF MEM[RIGHTPTR+2].INT<L THEN GOTO 10;
P:=RIGHTPTR;RIGHTPTR:=MEM[P].HH.RH;FREENODE(P,3);END;10:END;{:586}{589:}
PROCEDURE VLISTOUT;FORWARD;{:589}{590:}{1319:}
PROCEDURE SPECIALOUT(P:HALFWORD);VAR OLDSETTING:0..21;K:POOLPOINTER;
BEGIN IF CURH<>DVIH THEN BEGIN MOVEMENT(CURH-DVIH,143);DVIH:=CURH;END;
IF CURV<>DVIV THEN BEGIN MOVEMENT(CURV-DVIV,157);DVIV:=CURV;END;
OLDSETTING:=SELECTOR;SELECTOR:=21;
SHOWTOKENLIS(MEM[MEM[P+1].HH.RH].HH.RH,0,POOLSIZE-POOLPTR);
SELECTOR:=OLDSETTING;
BEGIN IF POOLPTR+1>POOLSIZE THEN OVERFLOW(129,POOLSIZE);END;
IF(POOLPTR-STRSTART[STRPTR])<256 THEN BEGIN BEGIN DVIBUF[DVIPTR]:=239;
DVIPTR:=DVIPTR+1;IF DVIPTR=DVILIMIT THEN DVISWAP;END;
BEGIN DVIBUF[DVIPTR]:=(POOLPTR-STRSTART[STRPTR]);DVIPTR:=DVIPTR+1;
IF DVIPTR=DVILIMIT THEN DVISWAP;END;
END ELSE BEGIN BEGIN DVIBUF[DVIPTR]:=242;DVIPTR:=DVIPTR+1;
IF DVIPTR=DVILIMIT THEN DVISWAP;END;DVIFOUR((POOLPTR-STRSTART[STRPTR]));
END;
FOR K:=STRSTART[STRPTR]TO POOLPTR-1 DO BEGIN DVIBUF[DVIPTR]:=STRPOOL[K];
DVIPTR:=DVIPTR+1;IF DVIPTR=DVILIMIT THEN DVISWAP;END;
POOLPTR:=STRSTART[STRPTR];END;{:1319}{1321:}
PROCEDURE WRITEOUT(P:HALFWORD);VAR OLDSETTING:0..21;OLDMODE:INTEGER;
J:SMALLNUMBER;Q,R:HALFWORD;BEGIN{1322:}Q:=GETAVAIL;MEM[Q].HH.LH:=637;
R:=GETAVAIL;MEM[Q].HH.RH:=R;MEM[R].HH.LH:=6462;BEGINTOKENLI(Q,4);
BEGINTOKENLI(MEM[P+1].HH.RH,11);Q:=GETAVAIL;MEM[Q].HH.LH:=379;
BEGINTOKENLI(Q,4);OLDMODE:=CURLIST.MODEFIELD;CURLIST.MODEFIELD:=0;
CSPTR:=WRITELOC;Q:=SCANTOKS(FALSE,TRUE);GETTOKEN;
IF CURTOK<>6462 THEN{1323:}BEGIN PRINTNL(1131);BEGIN HELPPTR:=2;
HELPLINE[1]:=1132;HELPLINE[0]:=818;END;ERROR;REPEAT GETTOKEN;
UNTIL CURTOK=6462;END{:1323};CURLIST.MODEFIELD:=OLDMODE;
ENDTOKENLIST{:1322};OLDSETTING:=SELECTOR;J:=MEM[P+1].HH.LH;
IF WRITEOPEN[J]THEN SELECTOR:=J ELSE PRINTNL(228);
SHOWTOKENLIS(MEM[DEFREF].HH.RH,0,BUFSIZE-10);PRINTLN;FLUSHLIST(DEFREF);
SELECTOR:=OLDSETTING;END;{:1321}{1324:}PROCEDURE OUTWHAT(P:HALFWORD);
VAR J:SMALLNUMBER;BEGIN CASE MEM[P].HH.B1 OF 0,1,2:{1325:}
IF NOT DOINGLEADERS THEN BEGIN J:=MEM[P+1].HH.LH;
IF MEM[P].HH.B1=1 THEN WRITEOUT(P)ELSE BEGIN IF WRITEOPEN[J]THEN ACLOSE(
WRITEFILE[J]);
IF MEM[P].HH.B1=2 THEN WRITEOPEN[J]:=FALSE ELSE BEGIN CURNAME:=MEM[P+1].
HH.RH;CURAREA:=MEM[P+2].HH.LH;CUREXT:=MEM[P+2].HH.RH;
IF CUREXT=228 THEN CUREXT:=612;PACKFILENAME(CURNAME,CURAREA,CUREXT);
WHILE NOT AOPENOUT(WRITEFILE[J])DO PROMPTFILENA(1134,612);
WRITEOPEN[J]:=TRUE;END;END;END{:1325};3:SPECIALOUT(P);
OTHERS:CONFUSION(1133)END;END;{:1324}PROCEDURE HLISTOUT;
LABEL 21,13,14,15;VAR BASELINE:SCALED;SAVEH,SAVEV:SCALED;
THISBOX:HALFWORD;GORDER:GLUEORD;GSIGN:0..2;P:HALFWORD;SAVELOC:INTEGER;
LEADERBOX:HALFWORD;LEADERWD:SCALED;OUTERDOINGLE:BOOLEAN;EDGE:SCALED;
BEGIN THISBOX:=TEMPPTR;GORDER:=MEM[THISBOX+5].HH.B1;
GSIGN:=MEM[THISBOX+5].HH.B0;P:=MEM[THISBOX+5].HH.RH;CURS:=CURS+1;
IF CURS>0 THEN BEGIN DVIBUF[DVIPTR]:=141;DVIPTR:=DVIPTR+1;
IF DVIPTR=DVILIMIT THEN DVISWAP;END;IF CURS>MAXPUSH THEN MAXPUSH:=CURS;
SAVELOC:=DVIOFFSET+DVIPTR;BASELINE:=CURV;WHILE P<>0 DO{591:}
21:IF(P>25000)THEN BEGIN IF CURH<>DVIH THEN BEGIN MOVEMENT(CURH-DVIH,143
);DVIH:=CURH;END;IF CURV<>DVIV THEN BEGIN MOVEMENT(CURV-DVIV,157);
DVIV:=CURV;END;REPEAT F:=MEM[P].HH.B0;C:=MEM[P].HH.B1;
IF F<>DVIF THEN{592:}BEGIN IF NOT FONTUSED[F]THEN BEGIN DVIFONTDEF(F);
FONTUSED[F]:=TRUE;END;IF F<=64 THEN BEGIN DVIBUF[DVIPTR]:=F+170;
DVIPTR:=DVIPTR+1;IF DVIPTR=DVILIMIT THEN DVISWAP;
END ELSE BEGIN BEGIN DVIBUF[DVIPTR]:=235;DVIPTR:=DVIPTR+1;
IF DVIPTR=DVILIMIT THEN DVISWAP;END;BEGIN DVIBUF[DVIPTR]:=F-1;
DVIPTR:=DVIPTR+1;IF DVIPTR=DVILIMIT THEN DVISWAP;END;END;DVIF:=F;
END{:592};IF C<128 THEN BEGIN DVIBUF[DVIPTR]:=C;DVIPTR:=DVIPTR+1;
IF DVIPTR=DVILIMIT THEN DVISWAP;
END ELSE BEGIN BEGIN DVIBUF[DVIPTR]:=128;DVIPTR:=DVIPTR+1;
IF DVIPTR=DVILIMIT THEN DVISWAP;END;BEGIN DVIBUF[DVIPTR]:=C;
DVIPTR:=DVIPTR+1;IF DVIPTR=DVILIMIT THEN DVISWAP;END;END;
CURH:=CURH+FONTINFO[WIDTHBASE[F]+FONTINFO[CHARBASE[F]+C].QQQQ.B0].INT;
P:=MEM[P].HH.RH;UNTIL NOT(P>25000);DVIH:=CURH;END ELSE{593:}
BEGIN CASE MEM[P].HH.B0 OF 0,1:{594:}
IF MEM[P+5].HH.RH=0 THEN CURH:=CURH+MEM[P+1].INT ELSE BEGIN SAVEH:=DVIH;
SAVEV:=DVIV;CURV:=BASELINE+MEM[P+4].INT;TEMPPTR:=P;EDGE:=CURH;
IF MEM[P].HH.B0=1 THEN VLISTOUT ELSE HLISTOUT;DVIH:=SAVEH;DVIV:=SAVEV;
CURH:=EDGE+MEM[P+1].INT;CURV:=BASELINE;END{:594};
2:BEGIN RULEHT:=MEM[P+3].INT;RULEDP:=MEM[P+2].INT;RULEWD:=MEM[P+1].INT;
GOTO 14;END;8:{1317:}OUTWHAT(P){:1317};10:{596:}BEGIN G:=MEM[P+1].HH.LH;
RULEWD:=MEM[G+1].INT;
IF GSIGN<>0 THEN BEGIN IF GSIGN=1 THEN BEGIN IF MEM[G].HH.B0=GORDER THEN
RULEWD:=RULEWD+ROUND(MEM[THISBOX+6].GR*MEM[G+2].INT);
END ELSE BEGIN IF MEM[G].HH.B1=GORDER THEN RULEWD:=RULEWD-ROUND(MEM[
THISBOX+6].GR*MEM[G+3].INT);END;END;IF MEM[P].HH.B1>=100 THEN{597:}
BEGIN LEADERBOX:=MEM[P+1].HH.RH;
IF MEM[LEADERBOX].HH.B0=2 THEN BEGIN RULEHT:=MEM[LEADERBOX+3].INT;
RULEDP:=MEM[LEADERBOX+2].INT;GOTO 14;END;LEADERWD:=MEM[LEADERBOX+1].INT;
IF(LEADERWD>0)AND(RULEWD>0)THEN BEGIN EDGE:=CURH+RULEWD;{598:}
IF MEM[P].HH.B1=100 THEN BEGIN SAVEH:=CURH;
CURH:=LEADERWD*(CURH DIV LEADERWD);
IF CURH<SAVEH THEN CURH:=CURH+LEADERWD;
END ELSE BEGIN LQ:=RULEWD DIV LEADERWD;LR:=RULEWD MOD LEADERWD;
IF MEM[P].HH.B1=101 THEN CURH:=CURH+(LR DIV 2)ELSE BEGIN LX:=(2*LR+LQ+1)
DIV(2*LQ+2);LEADERWD:=LEADERWD+LX;CURH:=CURH+((LR-(LQ-1)*LX)DIV 2);END;
END{:598};WHILE CURH+LEADERWD<=EDGE DO{599:}
BEGIN CURV:=BASELINE+MEM[LEADERBOX+4].INT;
IF CURV<>DVIV THEN BEGIN MOVEMENT(CURV-DVIV,157);DVIV:=CURV;END;
SAVEV:=DVIV;IF CURH<>DVIH THEN BEGIN MOVEMENT(CURH-DVIH,143);DVIH:=CURH;
END;SAVEH:=DVIH;TEMPPTR:=LEADERBOX;OUTERDOINGLE:=DOINGLEADERS;
DOINGLEADERS:=TRUE;
IF MEM[LEADERBOX].HH.B0=1 THEN VLISTOUT ELSE HLISTOUT;
DOINGLEADERS:=OUTERDOINGLE;DVIV:=SAVEV;DVIH:=SAVEH;CURV:=SAVEV;
CURH:=SAVEH+LEADERWD;END{:599};CURH:=EDGE;GOTO 15;END;END{:597};GOTO 13;
END{:596};11,9:CURH:=CURH+MEM[P+1].INT;6:{621:}
BEGIN MEM[25012]:=MEM[P+1];MEM[25012].HH.RH:=MEM[P].HH.RH;P:=25012;
GOTO 21;END{:621};OTHERS:END;GOTO 15;14:{595:}
IF(RULEHT=-1073741824)THEN RULEHT:=MEM[THISBOX+3].INT;
IF(RULEDP=-1073741824)THEN RULEDP:=MEM[THISBOX+2].INT;
RULEHT:=RULEHT+RULEDP;
IF(RULEHT>0)AND(RULEWD>0)THEN BEGIN IF CURH<>DVIH THEN BEGIN MOVEMENT(
CURH-DVIH,143);DVIH:=CURH;END;CURV:=BASELINE+RULEDP;
IF CURV<>DVIV THEN BEGIN MOVEMENT(CURV-DVIV,157);DVIV:=CURV;END;
BEGIN DVIBUF[DVIPTR]:=132;DVIPTR:=DVIPTR+1;
IF DVIPTR=DVILIMIT THEN DVISWAP;END;DVIFOUR(RULEHT);DVIFOUR(RULEWD);
CURV:=BASELINE;DVIH:=DVIH+RULEWD;END{:595};13:CURH:=CURH+RULEWD;
15:P:=MEM[P].HH.RH;END{:593}{:591};PRUNEMOVEMEN(SAVELOC);
IF CURS>0 THEN DVIPOP(SAVELOC);CURS:=CURS-1;END;{:590}{600:}
PROCEDURE VLISTOUT;LABEL 13,14,15;VAR LEFTEDGE:SCALED;
SAVEH,SAVEV:SCALED;THISBOX:HALFWORD;GORDER:GLUEORD;GSIGN:0..2;
P:HALFWORD;SAVELOC:INTEGER;LEADERBOX:HALFWORD;LEADERHT:SCALED;
OUTERDOINGLE:BOOLEAN;EDGE:SCALED;BEGIN THISBOX:=TEMPPTR;
GORDER:=MEM[THISBOX+5].HH.B1;GSIGN:=MEM[THISBOX+5].HH.B0;
P:=MEM[THISBOX+5].HH.RH;CURS:=CURS+1;
IF CURS>0 THEN BEGIN DVIBUF[DVIPTR]:=141;DVIPTR:=DVIPTR+1;
IF DVIPTR=DVILIMIT THEN DVISWAP;END;IF CURS>MAXPUSH THEN MAXPUSH:=CURS;
SAVELOC:=DVIOFFSET+DVIPTR;LEFTEDGE:=CURH;CURV:=CURV-MEM[THISBOX+3].INT;
WHILE P<>0 DO{601:}BEGIN IF(P>25000)THEN CONFUSION(647)ELSE{602:}
BEGIN CASE MEM[P].HH.B0 OF 0,1:{603:}
IF MEM[P+5].HH.RH=0 THEN CURV:=CURV+MEM[P+3].INT+MEM[P+2].INT ELSE BEGIN
CURV:=CURV+MEM[P+3].INT;
IF CURV<>DVIV THEN BEGIN MOVEMENT(CURV-DVIV,157);DVIV:=CURV;END;
SAVEH:=DVIH;SAVEV:=DVIV;CURH:=LEFTEDGE+MEM[P+4].INT;TEMPPTR:=P;
IF MEM[P].HH.B0=1 THEN VLISTOUT ELSE HLISTOUT;DVIH:=SAVEH;DVIV:=SAVEV;
CURV:=SAVEV+MEM[P+2].INT;CURH:=LEFTEDGE;END{:603};
2:BEGIN RULEHT:=MEM[P+3].INT;RULEDP:=MEM[P+2].INT;RULEWD:=MEM[P+1].INT;
GOTO 14;END;8:{1316:}OUTWHAT(P){:1316};10:{605:}BEGIN G:=MEM[P+1].HH.LH;
RULEHT:=MEM[G+1].INT;
IF GSIGN<>0 THEN BEGIN IF GSIGN=1 THEN BEGIN IF MEM[G].HH.B0=GORDER THEN
RULEHT:=RULEHT+ROUND(MEM[THISBOX+6].GR*MEM[G+2].INT);
END ELSE BEGIN IF MEM[G].HH.B1=GORDER THEN RULEHT:=RULEHT-ROUND(MEM[
THISBOX+6].GR*MEM[G+3].INT);END;END;IF MEM[P].HH.B1>=100 THEN{606:}
BEGIN LEADERBOX:=MEM[P+1].HH.RH;
IF MEM[LEADERBOX].HH.B0=2 THEN BEGIN RULEWD:=MEM[LEADERBOX+1].INT;
RULEDP:=0;GOTO 14;END;
LEADERHT:=MEM[LEADERBOX+3].INT+MEM[LEADERBOX+2].INT;
IF(LEADERHT>0)AND(RULEHT>0)THEN BEGIN EDGE:=CURV+RULEHT;{607:}
IF MEM[P].HH.B1=100 THEN BEGIN SAVEV:=CURV;
CURV:=LEADERHT*(CURV DIV LEADERHT);
IF CURV<SAVEV THEN CURV:=CURV+LEADERHT;
END ELSE BEGIN LQ:=RULEHT DIV LEADERHT;LR:=RULEHT MOD LEADERHT;
IF MEM[P].HH.B1=101 THEN CURV:=CURV+(LR DIV 2)ELSE BEGIN LX:=(2*LR+LQ+1)
DIV(2*LQ+2);LEADERHT:=LEADERHT+LX;CURV:=CURV+((LR-(LQ-1)*LX)DIV 2);END;
END{:607};WHILE CURV+LEADERHT<=EDGE DO{608:}
BEGIN CURH:=LEFTEDGE+MEM[LEADERBOX+4].INT;
IF CURH<>DVIH THEN BEGIN MOVEMENT(CURH-DVIH,143);DVIH:=CURH;END;
SAVEH:=DVIH;CURV:=CURV+MEM[LEADERBOX+3].INT;
IF CURV<>DVIV THEN BEGIN MOVEMENT(CURV-DVIV,157);DVIV:=CURV;END;
SAVEV:=DVIV;TEMPPTR:=LEADERBOX;OUTERDOINGLE:=DOINGLEADERS;
DOINGLEADERS:=TRUE;
IF MEM[LEADERBOX].HH.B0=1 THEN VLISTOUT ELSE HLISTOUT;
DOINGLEADERS:=OUTERDOINGLE;DVIV:=SAVEV;DVIH:=SAVEH;CURH:=SAVEH;
CURV:=SAVEV-MEM[LEADERBOX+3].INT+LEADERHT;END{:608};CURV:=EDGE;GOTO 15;
END;END{:606};GOTO 13;END{:605};11:CURV:=CURV+MEM[P+1].INT;OTHERS:END;
GOTO 15;14:{604:}IF(RULEWD=-1073741824)THEN RULEWD:=MEM[THISBOX+1].INT;
RULEHT:=RULEHT+RULEDP;CURV:=CURV+RULEHT;
IF(RULEHT>0)AND(RULEWD>0)THEN BEGIN IF CURH<>DVIH THEN BEGIN MOVEMENT(
CURH-DVIH,143);DVIH:=CURH;END;
IF CURV<>DVIV THEN BEGIN MOVEMENT(CURV-DVIV,157);DVIV:=CURV;END;
BEGIN DVIBUF[DVIPTR]:=137;DVIPTR:=DVIPTR+1;
IF DVIPTR=DVILIMIT THEN DVISWAP;END;DVIFOUR(RULEHT);DVIFOUR(RULEWD);END;
GOTO 15{:604};13:CURV:=CURV+RULEHT;END{:602};15:P:=MEM[P].HH.RH;
END{:601};PRUNEMOVEMEN(SAVELOC);IF CURS>0 THEN DVIPOP(SAVELOC);
CURS:=CURS-1;END;{:600}{609:}PROCEDURE SHIPOUT(P:HALFWORD);LABEL 30;
VAR PAGELOC:INTEGER;J,K:0..9;S:POOLPOINTER;OLDSETTING:0..21;
BEGIN IF EQTB[3884].INT<>0 THEN BEGIN PRINTNL(228);PRINTLN;PRINT(648);
END;IF TERMOFFSET>MAXPRINTLINE-9 THEN PRINTLN ELSE IF(TERMOFFSET>0)OR(
FILEOFFSET>0)THEN PRINTCHAR(32);PRINTCHAR(91);J:=9;
WHILE(EQTB[3893+J].INT=0)AND(J>0)DO J:=J-1;
FOR K:=0 TO J DO BEGIN PRINTINT(EQTB[3893+K].INT);
IF K<J THEN PRINTCHAR(46);END;BREAK(TTY);
IF EQTB[3884].INT<>0 THEN BEGIN PRINTCHAR(93);BEGINDIAGNOS;SHOWBOX(P);
ENDDIAGNOSTI(TRUE);END;{611:}{612:}
IF(MEM[P+3].INT>1073741823)OR(MEM[P+2].INT>1073741823)OR(MEM[P+1].INT>
1073741823)THEN BEGIN PRINTNL(652);BEGIN HELPPTR:=2;HELPLINE[1]:=653;
HELPLINE[0]:=654;END;ERROR;IF EQTB[3884].INT=0 THEN BEGIN BEGINDIAGNOS;
PRINTNL(655);SHOWBOX(P);ENDDIAGNOSTI(TRUE);END;GOTO 30;END;
IF MEM[P+3].INT+MEM[P+2].INT>MAXV THEN MAXV:=MEM[P+3].INT+MEM[P+2].INT;
IF MEM[P+1].INT>MAXH THEN MAXH:=MEM[P+1].INT{:612};{588:}DVIH:=0;
DVIV:=0;CURH:=0;DVIF:=0;CURS:=-1;
IF OUTPUTFILENA=0 THEN BEGIN IF JOBNAME=0 THEN OPENLOGFILE;
PACKJOBNAME(615);WHILE NOT BOPENOUT(DVIFILE)DO PROMPTFILENA(616,615);
OUTPUTFILENA:=BMAKENAMESTR(DVIFILE);END;
IF TOTALPAGES=0 THEN BEGIN BEGIN DVIBUF[DVIPTR]:=247;DVIPTR:=DVIPTR+1;
IF DVIPTR=DVILIMIT THEN DVISWAP;END;BEGIN DVIBUF[DVIPTR]:=2;
DVIPTR:=DVIPTR+1;IF DVIPTR=DVILIMIT THEN DVISWAP;END;DVIFOUR(25400000);
DVIFOUR(473628672);PREPAREMAG;DVIFOUR(EQTB[3867].INT);
OLDSETTING:=SELECTOR;SELECTOR:=21;PRINT(646);PRINTINT(EQTB[3873].INT);
PRINTCHAR(46);PRINTTWO(EQTB[3872].INT);PRINTCHAR(46);
PRINTTWO(EQTB[3871].INT);PRINTCHAR(58);PRINTTWO(EQTB[3870].INT DIV 60);
PRINTTWO(EQTB[3870].INT MOD 60);SELECTOR:=OLDSETTING;
BEGIN DVIBUF[DVIPTR]:=(POOLPTR-STRSTART[STRPTR]);DVIPTR:=DVIPTR+1;
IF DVIPTR=DVILIMIT THEN DVISWAP;END;
FOR S:=STRSTART[STRPTR]TO POOLPTR-1 DO BEGIN DVIBUF[DVIPTR]:=STRPOOL[S];
DVIPTR:=DVIPTR+1;IF DVIPTR=DVILIMIT THEN DVISWAP;END;
POOLPTR:=STRSTART[STRPTR];END{:588};PAGELOC:=DVIOFFSET+DVIPTR;
BEGIN DVIBUF[DVIPTR]:=139;DVIPTR:=DVIPTR+1;
IF DVIPTR=DVILIMIT THEN DVISWAP;END;
FOR K:=0 TO 9 DO DVIFOUR(EQTB[3893+K].INT);DVIFOUR(LASTBOP);
LASTBOP:=PAGELOC;CURV:=MEM[P+3].INT;TEMPPTR:=P;
IF MEM[P].HH.B0=1 THEN VLISTOUT ELSE HLISTOUT;BEGIN DVIBUF[DVIPTR]:=140;
DVIPTR:=DVIPTR+1;IF DVIPTR=DVILIMIT THEN DVISWAP;END;
TOTALPAGES:=TOTALPAGES+1;30:{:611};
IF EQTB[3884].INT=0 THEN PRINTCHAR(93);DEADCYCLES:=0;BREAK(TTY);{610:}
IF EQTB[3881].INT>1 THEN BEGIN PRINTNL(649);PRINTINT(VARUSED);
PRINTCHAR(38);PRINTINT(DYNUSED);PRINTCHAR(59);END;FLUSHNODELIS(P);
IF EQTB[3881].INT>1 THEN BEGIN PRINT(650);PRINTINT(VARUSED);
PRINTCHAR(38);PRINTINT(DYNUSED);PRINT(651);PRINTINT(MAXVARUSED);
PRINTCHAR(38);PRINTINT(MEMEND-24999);PRINTLN;END;{:610};END;{:609}{616:}
PROCEDURE SCANSPEC;LABEL 40;
BEGIN IF SCANKEYWORD(662)THEN SAVESTACK[SAVEPTR+0].INT:=0 ELSE IF
SCANKEYWORD(663)THEN SAVESTACK[SAVEPTR+0].INT:=1 ELSE BEGIN SAVESTACK[
SAVEPTR+0].INT:=1;SAVESTACK[SAVEPTR+1].INT:=0;GOTO 40;END;
SCANDIMEN(FALSE,FALSE,FALSE);SAVESTACK[SAVEPTR+1].INT:=CURVAL;
40:SAVEPTR:=SAVEPTR+2;SCANLEFTBRAC;END;{:616}{618:}
FUNCTION HPACK(P:HALFWORD;W:SCALED;M:SMALLNUMBER):HALFWORD;
LABEL 21,50,10;VAR R:HALFWORD;Q:HALFWORD;H,D,X:SCALED;S:SCALED;
G:HALFWORD;O:GLUEORD;F:INTERNALFONT;I:FOURQUARTERS;HD:EIGHTBITS;
T:HALFWORD;B:INTEGER;BEGIN R:=GETNODE(7);MEM[R].HH.B0:=0;
MEM[R].HH.B1:=0;MEM[R+4].INT:=0;Q:=R+5;MEM[Q].HH.RH:=P;T:=25005;H:=0;
{619:}D:=0;X:=0;TOTALSTRETCH[0]:=0;TOTALSHRINK[0]:=0;TOTALSTRETCH[1]:=0;
TOTALSHRINK[1]:=0;TOTALSTRETCH[2]:=0;TOTALSHRINK[2]:=0;
TOTALSTRETCH[3]:=0;TOTALSHRINK[3]:=0{:619};WHILE P<>0 DO{620:}
BEGIN 21:WHILE(P>25000)DO{623:}BEGIN F:=MEM[P].HH.B0;
I:=FONTINFO[CHARBASE[F]+MEM[P].HH.B1].QQQQ;HD:=I.B1;
X:=X+FONTINFO[WIDTHBASE[F]+I.B0].INT;
S:=FONTINFO[HEIGHTBASE[F]+HD DIV 16].INT;IF S>H THEN H:=S;
S:=FONTINFO[DEPTHBASE[F]+HD MOD 16].INT;IF S>D THEN D:=S;
P:=MEM[P].HH.RH;END{:623};
IF P<>0 THEN BEGIN CASE MEM[P].HH.B0 OF 0,1,2,13:{622:}
BEGIN X:=X+MEM[P+1].INT;
IF MEM[P].HH.B0>=2 THEN S:=0 ELSE S:=MEM[P+4].INT;
IF MEM[P+3].INT-S>H THEN H:=MEM[P+3].INT-S;
IF MEM[P+2].INT+S>D THEN D:=MEM[P+2].INT+S;END{:622};3,4,5:{624:}
BEGIN WHILE MEM[Q].HH.RH<>P DO Q:=MEM[Q].HH.RH;
IF MEM[P].HH.B0=5 THEN BEGIN MEM[T].HH.RH:=MEM[P+1].INT;
WHILE MEM[T].HH.RH<>0 DO T:=MEM[T].HH.RH;P:=MEM[P].HH.RH;
FREENODE(MEM[Q].HH.RH,2);END ELSE BEGIN MEM[T].HH.RH:=P;T:=P;
P:=MEM[P].HH.RH;END;MEM[Q].HH.RH:=P;P:=Q;END{:624};8:{1311:}{:1311};
10:{625:}BEGIN G:=MEM[P+1].HH.LH;X:=X+MEM[G+1].INT;O:=MEM[G].HH.B0;
TOTALSTRETCH[O]:=TOTALSTRETCH[O]+MEM[G+2].INT;O:=MEM[G].HH.B1;
TOTALSHRINK[O]:=TOTALSHRINK[O]+MEM[G+3].INT;END{:625};
11,9:X:=X+MEM[P+1].INT;6:{621:}BEGIN MEM[25012]:=MEM[P+1];
MEM[25012].HH.RH:=MEM[P].HH.RH;P:=25012;GOTO 21;END{:621};OTHERS:END;
P:=MEM[P].HH.RH;END;END{:620};MEM[T].HH.RH:=0;MEM[R+3].INT:=H;
MEM[R+2].INT:=D;{626:}IF M=1 THEN W:=X+W;MEM[R+1].INT:=W;X:=W-X;
IF X=0 THEN BEGIN MEM[R+5].HH.B0:=0;MEM[R+5].HH.B1:=0;MEM[R+6].GR:=0.0;
GOTO 10;END ELSE IF X>0 THEN{627:}BEGIN{628:}
IF TOTALSTRETCH[3]<>0 THEN O:=3 ELSE IF TOTALSTRETCH[2]<>0 THEN O:=2
ELSE IF TOTALSTRETCH[1]<>0 THEN O:=1 ELSE O:=0{:628};MEM[R+5].HH.B1:=O;
MEM[R+5].HH.B0:=1;
IF TOTALSTRETCH[O]<>0 THEN MEM[R+6].GR:=X/TOTALSTRETCH[O]ELSE BEGIN MEM[
R+5].HH.B0:=0;MEM[R+6].GR:=0.0;END;
IF(EQTB[3876].INT<10000)AND(O=0)AND(MEM[R+5].HH.RH<>0)THEN{629:}
BEGIN B:=BADNESS(X,TOTALSTRETCH[0]);
IF B>EQTB[3876].INT THEN BEGIN PRINTLN;
IF B>100 THEN PRINTNL(664)ELSE PRINTNL(665);PRINT(666);PRINTINT(B);
GOTO 50;END;END{:629};GOTO 10;END{:627}ELSE{633:}BEGIN{634:}
IF TOTALSHRINK[3]<>0 THEN O:=3 ELSE IF TOTALSHRINK[2]<>0 THEN O:=2 ELSE
IF TOTALSHRINK[1]<>0 THEN O:=1 ELSE O:=0{:634};MEM[R+5].HH.B1:=O;
MEM[R+5].HH.B0:=2;
IF TOTALSHRINK[O]<>0 THEN MEM[R+6].GR:=-X/TOTALSHRINK[O]ELSE BEGIN MEM[R
+5].HH.B0:=0;MEM[R+6].GR:=0.0;END;
IF(TOTALSHRINK[O]<-X)AND(O=0)AND(MEM[R+5].HH.RH<>0)THEN BEGIN MEM[R+6].
GR:=1.0;{635:}
IF(-X-TOTALSHRINK[0]>EQTB[4286].INT)OR(EQTB[3876].INT<100)THEN BEGIN IF
EQTB[4294].INT>0 THEN BEGIN WHILE MEM[Q].HH.RH<>0 DO Q:=MEM[Q].HH.RH;
MEM[Q].HH.RH:=NEWRULE;MEM[MEM[Q].HH.RH+1].INT:=EQTB[4294].INT;END;
PRINTLN;PRINTNL(671);PRINTSCALED(-X-TOTALSHRINK[0]);PRINT(672);GOTO 50;
END{:635};
END ELSE IF(EQTB[3876].INT<100)AND(O=0)AND(MEM[R+5].HH.RH<>0)THEN{636:}
BEGIN B:=BADNESS(-X,TOTALSHRINK[0]);
IF B>EQTB[3876].INT THEN BEGIN PRINTLN;PRINTNL(673);PRINTINT(B);GOTO 50;
END;END{:636};GOTO 10;END{:633}{:626};50:{632:}
IF OUTPUTACTIVE THEN PRINT(667)ELSE BEGIN IF PARBEGINLINE<>0 THEN BEGIN
PRINT(668);PRINTINT(PARBEGINLINE);PRINT(669);END ELSE PRINT(670);
PRINTINT(LINE);IF PAGE>1 THEN BEGIN PRINT(420);PRINTINT(PAGE);END;END;
PRINTLN;FONTINSHORTD:=0;SHORTDISPLAY(MEM[R+5].HH.RH);PRINTLN;
BEGINDIAGNOS;SHOWBOX(R);ENDDIAGNOSTI(TRUE){:632};10:HPACK:=R;END;{:618}
{637:}FUNCTION VPACKAGE(P:HALFWORD;H:SCALED;M:SMALLNUMBER;
L:SCALED):HALFWORD;LABEL 50,10;VAR R:HALFWORD;W,D,X:SCALED;S:SCALED;
G:HALFWORD;O:GLUEORD;B:INTEGER;BEGIN R:=GETNODE(7);MEM[R].HH.B0:=1;
MEM[R].HH.B1:=0;MEM[R+4].INT:=0;MEM[R+5].HH.RH:=P;W:=0;{619:}D:=0;X:=0;
TOTALSTRETCH[0]:=0;TOTALSHRINK[0]:=0;TOTALSTRETCH[1]:=0;
TOTALSHRINK[1]:=0;TOTALSTRETCH[2]:=0;TOTALSHRINK[2]:=0;
TOTALSTRETCH[3]:=0;TOTALSHRINK[3]:=0{:619};WHILE P<>0 DO{638:}
BEGIN IF(P>25000)THEN CONFUSION(674)ELSE CASE MEM[P].HH.B0 OF 0,1,2,13:{
639:}BEGIN X:=X+D+MEM[P+3].INT;D:=MEM[P+2].INT;
IF MEM[P].HH.B0>=2 THEN S:=0 ELSE S:=MEM[P+4].INT;
IF MEM[P+1].INT+S>W THEN W:=MEM[P+1].INT+S;END{:639};8:{1310:}{:1310};
10:BEGIN X:=X+D;D:=0;{625:}BEGIN G:=MEM[P+1].HH.LH;X:=X+MEM[G+1].INT;
O:=MEM[G].HH.B0;TOTALSTRETCH[O]:=TOTALSTRETCH[O]+MEM[G+2].INT;
O:=MEM[G].HH.B1;TOTALSHRINK[O]:=TOTALSHRINK[O]+MEM[G+3].INT;END{:625};
END;11:BEGIN X:=X+D+MEM[P+1].INT;D:=0;END;OTHERS:END;P:=MEM[P].HH.RH;
END{:638};MEM[R+1].INT:=W;IF D>L THEN BEGIN X:=X+D-L;MEM[R+2].INT:=L;
END ELSE MEM[R+2].INT:=D;{640:}IF M=1 THEN H:=X+H;MEM[R+3].INT:=H;
X:=H-X;IF X=0 THEN BEGIN MEM[R+5].HH.B0:=0;MEM[R+5].HH.B1:=0;
MEM[R+6].GR:=0.0;GOTO 10;END ELSE IF X>0 THEN{641:}BEGIN{628:}
IF TOTALSTRETCH[3]<>0 THEN O:=3 ELSE IF TOTALSTRETCH[2]<>0 THEN O:=2
ELSE IF TOTALSTRETCH[1]<>0 THEN O:=1 ELSE O:=0{:628};MEM[R+5].HH.B1:=O;
MEM[R+5].HH.B0:=1;
IF TOTALSTRETCH[O]<>0 THEN MEM[R+6].GR:=X/TOTALSTRETCH[O]ELSE BEGIN MEM[
R+5].HH.B0:=0;MEM[R+6].GR:=0.0;END;
IF(EQTB[3877].INT<10000)AND(O=0)AND(MEM[R+5].HH.RH<>0)THEN{642:}
BEGIN B:=BADNESS(X,TOTALSTRETCH[0]);
IF B>EQTB[3877].INT THEN BEGIN PRINTLN;
IF B>100 THEN PRINTNL(664)ELSE PRINTNL(665);PRINT(675);PRINTINT(B);
GOTO 50;END;END{:642};GOTO 10;END{:641}ELSE{644:}BEGIN{634:}
IF TOTALSHRINK[3]<>0 THEN O:=3 ELSE IF TOTALSHRINK[2]<>0 THEN O:=2 ELSE
IF TOTALSHRINK[1]<>0 THEN O:=1 ELSE O:=0{:634};MEM[R+5].HH.B1:=O;
MEM[R+5].HH.B0:=2;
IF TOTALSHRINK[O]<>0 THEN MEM[R+6].GR:=-X/TOTALSHRINK[O]ELSE BEGIN MEM[R
+5].HH.B0:=0;MEM[R+6].GR:=0.0;END;
IF(TOTALSHRINK[O]<-X)AND(O=0)AND(MEM[R+5].HH.RH<>0)THEN BEGIN MEM[R+6].
GR:=1.0;{645:}
IF(-X-TOTALSHRINK[0]>EQTB[4287].INT)OR(EQTB[3877].INT<100)THEN BEGIN
PRINTLN;PRINTNL(676);PRINTSCALED(-X-TOTALSHRINK[0]);PRINT(677);GOTO 50;
END{:645};
END ELSE IF(EQTB[3877].INT<100)AND(O=0)AND(MEM[R+5].HH.RH<>0)THEN{646:}
BEGIN B:=BADNESS(-X,TOTALSHRINK[0]);
IF B>EQTB[3877].INT THEN BEGIN PRINTLN;PRINTNL(678);PRINTINT(B);GOTO 50;
END;END{:646};GOTO 10;END{:644}{:640};50:{643:}
IF OUTPUTACTIVE THEN PRINT(667)ELSE BEGIN PRINT(670);PRINTINT(LINE);
IF PAGE>1 THEN BEGIN PRINT(420);PRINTINT(PAGE);END;PRINTLN;END;
BEGINDIAGNOS;SHOWBOX(R);ENDDIAGNOSTI(TRUE){:643};10:VPACKAGE:=R;END;
{:637}{647:}PROCEDURE APPENDTOVLIS(B:HALFWORD);VAR D:SCALED;P:HALFWORD;
BEGIN IF CURLIST.AUXFIELD>-65536000 THEN BEGIN D:=MEM[EQTB[2370].HH.RH+1
].INT-CURLIST.AUXFIELD-MEM[B+3].INT;
IF D<EQTB[4280].INT THEN P:=NEWPARAMGLUE(0)ELSE BEGIN P:=NEWSKIPPARAM(1)
;MEM[TEMPPTR+1].INT:=D;END;MEM[CURLIST.TAILFIELD].HH.RH:=P;
CURLIST.TAILFIELD:=P;END;MEM[CURLIST.TAILFIELD].HH.RH:=B;
CURLIST.TAILFIELD:=B;CURLIST.AUXFIELD:=MEM[B+2].INT;END;{:647}{654:}
FUNCTION NEWNOAD:HALFWORD;VAR P:HALFWORD;BEGIN P:=GETNODE(4);
MEM[P].HH.B0:=16;MEM[P].HH.B1:=0;MEM[P+1].HH:=EMPTYFIELD;
MEM[P+3].HH:=EMPTYFIELD;MEM[P+2].HH:=EMPTYFIELD;NEWNOAD:=P;END;{:654}
{656:}FUNCTION NEWSTYLE(S:SMALLNUMBER):HALFWORD;VAR P:HALFWORD;
BEGIN P:=GETNODE(3);MEM[P].HH.B0:=14;MEM[P].HH.B1:=S;MEM[P+1].INT:=0;
MEM[P+2].INT:=0;NEWSTYLE:=P;END;{:656}{657:}FUNCTION NEWCHOICE:HALFWORD;
VAR P:HALFWORD;BEGIN P:=GETNODE(3);MEM[P].HH.B0:=15;MEM[P].HH.B1:=0;
MEM[P+1].HH.LH:=0;MEM[P+1].HH.RH:=0;MEM[P+2].HH.LH:=0;MEM[P+2].HH.RH:=0;
NEWCHOICE:=P;END;{:657}{661:}PROCEDURE SHOWINFO;
BEGIN SHOWNODELIST(MEM[TEMPPTR].HH.LH);END;{:661}{672:}
FUNCTION FRACTIONRULE(T:SCALED):HALFWORD;VAR P:HALFWORD;
BEGIN P:=NEWRULE;MEM[P+3].INT:=T;MEM[P+2].INT:=0;FRACTIONRULE:=P;END;
{:672}{673:}FUNCTION OVERBAR(B:HALFWORD;K,T:SCALED):HALFWORD;
VAR P,Q:HALFWORD;BEGIN P:=NEWKERN(K);MEM[P].HH.RH:=B;Q:=FRACTIONRULE(T);
MEM[Q].HH.RH:=P;P:=NEWKERN(T);MEM[P].HH.RH:=Q;
OVERBAR:=VPACKAGE(P,0,1,1073741823);END;{:673}{674:}{677:}
FUNCTION CHARBOX(F:INTERNALFONT;C:QUARTERWORD):HALFWORD;
VAR Q:FOURQUARTERS;HD:EIGHTBITS;B,P:HALFWORD;
BEGIN Q:=FONTINFO[CHARBASE[F]+C].QQQQ;HD:=Q.B1;B:=NEWNULLBOX;
MEM[B+1].INT:=FONTINFO[WIDTHBASE[F]+Q.B0].INT+FONTINFO[ITALICBASE[F]+Q.
B2 DIV 4].INT;MEM[B+3].INT:=FONTINFO[HEIGHTBASE[F]+HD DIV 16].INT;
MEM[B+2].INT:=FONTINFO[DEPTHBASE[F]+HD MOD 16].INT;P:=GETAVAIL;
MEM[P].HH.B1:=C;MEM[P].HH.B0:=F;MEM[B+5].HH.RH:=P;CHARBOX:=B;END;{:677}
{679:}PROCEDURE STACKINTOBOX(B:HALFWORD;F:INTERNALFONT;C:QUARTERWORD);
VAR P:HALFWORD;BEGIN P:=CHARBOX(F,C);MEM[P].HH.RH:=MEM[B+5].HH.RH;
MEM[B+5].HH.RH:=P;MEM[B+3].INT:=MEM[P+3].INT;END;{:679}{680:}
FUNCTION HEIGHTPLUSDE(F:INTERNALFONT;C:QUARTERWORD):SCALED;
VAR Q:FOURQUARTERS;HD:EIGHTBITS;BEGIN Q:=FONTINFO[CHARBASE[F]+C].QQQQ;
HD:=Q.B1;
HEIGHTPLUSDE:=FONTINFO[HEIGHTBASE[F]+HD DIV 16].INT+FONTINFO[DEPTHBASE[F
]+HD MOD 16].INT;END;{:680}FUNCTION VARDELIMITER(D:HALFWORD;
S:SMALLNUMBER;V:SCALED):HALFWORD;LABEL 40,22;VAR B:HALFWORD;
F,G:INTERNALFONT;C,X,Y:QUARTERWORD;M,N:INTEGER;U:SCALED;W:SCALED;
Q:FOURQUARTERS;HD:EIGHTBITS;R:FOURQUARTERS;Z:SMALLNUMBER;
LARGEATTEMPT:BOOLEAN;BEGIN F:=0;W:=0;LARGEATTEMPT:=FALSE;
Z:=MEM[D].QQQQ.B0;X:=MEM[D].QQQQ.B1;WHILE TRUE DO BEGIN{675:}
IF(Z<>0)OR(X<>0)THEN BEGIN Z:=Z+S+16;REPEAT Z:=Z-16;
G:=EQTB[3161+Z].HH.RH;IF G<>0 THEN{676:}BEGIN Y:=X;
22:IF(Y>=FONTBC[G])AND(Y<=FONTEC[G])THEN BEGIN Q:=FONTINFO[CHARBASE[G]+Y
].QQQQ;IF(Q.B0>0)THEN BEGIN IF(Q.B2 MOD 4)=3 THEN BEGIN F:=G;C:=Y;
GOTO 40;END;HD:=Q.B1;
U:=FONTINFO[HEIGHTBASE[G]+HD DIV 16].INT+FONTINFO[DEPTHBASE[G]+HD MOD 16
].INT;IF U>W THEN BEGIN F:=G;C:=Y;W:=U;IF U>=V THEN GOTO 40;END;
IF(Q.B2 MOD 4)=2 THEN BEGIN Y:=Q.B3;GOTO 22;END;END;END;END{:676};
UNTIL Z<16;END{:675};IF LARGEATTEMPT THEN GOTO 40;LARGEATTEMPT:=TRUE;
Z:=MEM[D].QQQQ.B2;X:=MEM[D].QQQQ.B3;END;40:IF F<>0 THEN{678:}
IF(Q.B2 MOD 4)=3 THEN{681:}BEGIN B:=NEWNULLBOX;MEM[B].HH.B0:=1;
R:=FONTINFO[EXTENBASE[F]+Q.B3].QQQQ;{682:}C:=R.B3;U:=HEIGHTPLUSDE(F,C);
W:=0;Q:=FONTINFO[CHARBASE[F]+C].QQQQ;
MEM[B+1].INT:=FONTINFO[WIDTHBASE[F]+Q.B0].INT+FONTINFO[ITALICBASE[F]+Q.
B2 DIV 4].INT;C:=R.B2;IF C<>0 THEN W:=W+HEIGHTPLUSDE(F,C);C:=R.B1;
IF C<>0 THEN W:=W+HEIGHTPLUSDE(F,C);C:=R.B0;
IF C<>0 THEN W:=W+HEIGHTPLUSDE(F,C);N:=0;
IF U>0 THEN WHILE W<V DO BEGIN W:=W+U;N:=N+1;IF R.B1<>0 THEN W:=W+U;
END{:682};C:=R.B2;IF C<>0 THEN STACKINTOBOX(B,F,C);C:=R.B3;
FOR M:=1 TO N DO STACKINTOBOX(B,F,C);C:=R.B1;
IF C<>0 THEN BEGIN STACKINTOBOX(B,F,C);C:=R.B3;
FOR M:=1 TO N DO STACKINTOBOX(B,F,C);END;C:=R.B0;
IF C<>0 THEN STACKINTOBOX(B,F,C);MEM[B+2].INT:=W-MEM[B+3].INT;END{:681}
ELSE B:=CHARBOX(F,C){:678}ELSE BEGIN B:=NEWNULLBOX;
MEM[B+1].INT:=EQTB[4289].INT;END;
MEM[B+4].INT:=HALF(MEM[B+3].INT-MEM[B+2].INT)-FONTINFO[22+PARAMBASE[EQTB
[3163+S].HH.RH]].INT;VARDELIMITER:=B;END;{:674}{683:}
FUNCTION REBOX(B:HALFWORD;W:SCALED):HALFWORD;VAR P:HALFWORD;
F:INTERNALFONT;V:SCALED;
BEGIN IF(MEM[B+1].INT<>W)AND(MEM[B+5].HH.RH<>0)THEN BEGIN IF MEM[B].HH.
B0=1 THEN B:=HPACK(B,0,1);P:=MEM[B+5].HH.RH;
IF((P>25000))AND(MEM[P].HH.RH=0)THEN BEGIN F:=MEM[P].HH.B0;
V:=FONTINFO[WIDTHBASE[F]+FONTINFO[CHARBASE[F]+MEM[P].HH.B1].QQQQ.B0].INT
;IF V<>MEM[B+1].INT THEN MEM[P].HH.RH:=NEWKERN(MEM[B+1].INT-V);END;
FREENODE(B,7);B:=NEWGLUE(12);MEM[B].HH.RH:=P;
WHILE MEM[P].HH.RH<>0 DO P:=MEM[P].HH.RH;MEM[P].HH.RH:=NEWGLUE(12);
REBOX:=HPACK(B,W,0);END ELSE BEGIN MEM[B+1].INT:=W;REBOX:=B;END;END;
{:683}{684:}FUNCTION MATHGLUE(G:HALFWORD;M:SCALED):HALFWORD;
VAR P:HALFWORD;N:INTEGER;F:SCALED;BEGIN N:=XOVERN(M,65536);F:=REMAINDER;
P:=GETNODE(4);
MEM[P+1].INT:=NXPLUSY(N,MEM[G+1].INT,XNOVERD(MEM[G+1].INT,F,65536));
MEM[P].HH.B0:=MEM[G].HH.B0;
IF MEM[P].HH.B0=0 THEN MEM[P+2].INT:=NXPLUSY(N,MEM[G+2].INT,XNOVERD(MEM[
G+2].INT,F,65536))ELSE MEM[P+2].INT:=MEM[G+2].INT;
MEM[P].HH.B1:=MEM[G].HH.B1;
IF MEM[P].HH.B1=0 THEN MEM[P+3].INT:=NXPLUSY(N,MEM[G+3].INT,XNOVERD(MEM[
G+3].INT,F,65536))ELSE MEM[P+3].INT:=MEM[G+3].INT;MATHGLUE:=P;END;{:684}
{685:}PROCEDURE MATHKERN(P:HALFWORD;M:SCALED);VAR N:INTEGER;F:SCALED;
BEGIN IF MEM[P].HH.B1=99 THEN BEGIN N:=XOVERN(M,65536);F:=REMAINDER;
MEM[P+1].INT:=NXPLUSY(N,MEM[P+1].INT,XNOVERD(MEM[P+1].INT,F,65536));
MEM[P].HH.B1:=0;END;END;{:685}{686:}PROCEDURE FLUSHMATH;
BEGIN FLUSHNODELIS(MEM[CURLIST.HEADFIELD].HH.RH);
FLUSHNODELIS(CURLIST.AUXFIELD);MEM[CURLIST.HEADFIELD].HH.RH:=0;
CURLIST.TAILFIELD:=CURLIST.HEADFIELD;CURLIST.AUXFIELD:=0;END;{:686}
{688:}PROCEDURE MLISTTOHLIST;FORWARD;FUNCTION CLEANBOX(P:HALFWORD;
S:SMALLNUMBER):HALFWORD;LABEL 40;VAR Q:HALFWORD;SAVESTYLE:SMALLNUMBER;
X:HALFWORD;R:HALFWORD;
BEGIN CASE MEM[P].HH.RH OF 1:BEGIN CURMLIST:=NEWNOAD;
MEM[CURMLIST+1]:=MEM[P];END;2:BEGIN Q:=MEM[P].HH.LH;GOTO 40;END;
3:CURMLIST:=MEM[P].HH.LH;OTHERS:BEGIN Q:=NEWNULLBOX;GOTO 40;END END;
SAVESTYLE:=CURSTYLE;CURSTYLE:=S;MLISTPENALTI:=FALSE;MLISTTOHLIST;
Q:=MEM[25003].HH.RH;CURSTYLE:=SAVESTYLE;{671:}
BEGIN IF CURSTYLE<4 THEN CURSIZE:=0 ELSE CURSIZE:=16*((CURSTYLE-2)DIV 2)
;CURMU:=XOVERN(FONTINFO[6+PARAMBASE[EQTB[3163+CURSIZE].HH.RH]].INT,18);
END{:671};
40:IF(Q>25000)OR(Q=0)THEN X:=HPACK(Q,0,1)ELSE IF(MEM[Q].HH.RH=0)AND(MEM[
Q].HH.B0<=1)AND(MEM[Q+4].INT=0)THEN X:=Q ELSE X:=HPACK(Q,0,1);{689:}
Q:=MEM[X+5].HH.RH;IF(Q>25000)THEN BEGIN R:=MEM[Q].HH.RH;
IF R<>0 THEN IF MEM[R].HH.RH=0 THEN IF MEM[R].HH.B0=11 THEN BEGIN
FREENODE(R,2);MEM[Q].HH.RH:=0;END;END{:689};CLEANBOX:=X;END;{:688}{690:}
PROCEDURE FETCH(A:HALFWORD);BEGIN CURC:=MEM[A].HH.B1;
CURF:=EQTB[3161+MEM[A].HH.B0+CURSIZE].HH.RH;IF CURF=0 THEN{691:}
BEGIN PRINTNL(706);PRINTSIZE(CURSIZE);PRINTCHAR(32);
PRINTINT(MEM[A].HH.B0);PRINT(707);PRINTASCII(CURC);PRINTCHAR(41);
BEGIN HELPPTR:=3;HELPLINE[2]:=708;HELPLINE[1]:=709;HELPLINE[0]:=710;END;
ERROR;CURI:=NULLCHARACTE;MEM[A].HH.RH:=0;END{:691}
ELSE BEGIN IF(CURC>=FONTBC[CURF])AND(CURC<=FONTEC[CURF])THEN CURI:=
FONTINFO[CHARBASE[CURF]+CURC].QQQQ ELSE CURI:=NULLCHARACTE;
IF NOT((CURI.B0>0))THEN BEGIN CHARWARNING(CURF,CURC);MEM[A].HH.RH:=0;
END;END;END;{:690}{694:}{702:}PROCEDURE MAKEOVER(Q:HALFWORD);
BEGIN MEM[Q+1].HH.LH:=OVERBAR(CLEANBOX(Q+1,2*(CURSTYLE DIV 2)+1),3*
FONTINFO[8+PARAMBASE[EQTB[3164+CURSIZE].HH.RH]].INT,FONTINFO[8+PARAMBASE
[EQTB[3164+CURSIZE].HH.RH]].INT);MEM[Q+1].HH.RH:=2;END;{:702}{703:}
PROCEDURE MAKEUNDER(Q:HALFWORD);VAR P,X,Y:HALFWORD;DELTA:SCALED;
BEGIN X:=CLEANBOX(Q+1,CURSTYLE);
P:=NEWKERN(3*FONTINFO[8+PARAMBASE[EQTB[3164+CURSIZE].HH.RH]].INT);
MEM[X].HH.RH:=P;
MEM[P].HH.RH:=FRACTIONRULE(FONTINFO[8+PARAMBASE[EQTB[3164+CURSIZE].HH.RH
]].INT);Y:=VPACKAGE(X,0,1,1073741823);
DELTA:=MEM[Y+3].INT+MEM[Y+2].INT+FONTINFO[8+PARAMBASE[EQTB[3164+CURSIZE]
.HH.RH]].INT;MEM[Y+3].INT:=MEM[X+3].INT;
MEM[Y+2].INT:=DELTA-MEM[Y+3].INT;MEM[Q+1].HH.LH:=Y;MEM[Q+1].HH.RH:=2;
END;{:703}{704:}PROCEDURE MAKEVCENTER(Q:HALFWORD);VAR V:HALFWORD;
DELTA:SCALED;BEGIN V:=MEM[Q+1].HH.LH;
IF MEM[V].HH.B0<>1 THEN CONFUSION(362);DELTA:=MEM[V+3].INT+MEM[V+2].INT;
MEM[V+3].INT:=FONTINFO[22+PARAMBASE[EQTB[3163+CURSIZE].HH.RH]].INT+HALF(
DELTA);MEM[V+2].INT:=DELTA-MEM[V+3].INT;END;{:704}{705:}
PROCEDURE MAKERADICAL(Q:HALFWORD);VAR X,Y:HALFWORD;DELTA,CLR:SCALED;
BEGIN X:=CLEANBOX(Q+1,2*(CURSTYLE DIV 2)+1);
IF CURSTYLE<2 THEN CLR:=FONTINFO[8+PARAMBASE[EQTB[3164+CURSIZE].HH.RH]].
INT+(ABS(FONTINFO[5+PARAMBASE[EQTB[3163+CURSIZE].HH.RH]].INT)DIV 4)ELSE
BEGIN CLR:=FONTINFO[8+PARAMBASE[EQTB[3164+CURSIZE].HH.RH]].INT;
CLR:=CLR+(ABS(CLR)DIV 4);END;
Y:=VARDELIMITER(Q+4,CURSIZE,MEM[X+3].INT+MEM[X+2].INT+CLR+FONTINFO[8+
PARAMBASE[EQTB[3164+CURSIZE].HH.RH]].INT);
DELTA:=MEM[Y+2].INT-(MEM[X+3].INT+MEM[X+2].INT+CLR);
IF DELTA>0 THEN CLR:=CLR+HALF(DELTA);MEM[Y+4].INT:=-(MEM[X+3].INT+CLR);
MEM[Y].HH.RH:=OVERBAR(X,CLR,MEM[Y+3].INT);MEM[Q+1].HH.LH:=HPACK(Y,0,1);
MEM[Q+1].HH.RH:=2;END;{:705}{706:}PROCEDURE MAKEMATHACCE(Q:HALFWORD);
LABEL 30;VAR P,X,Y:HALFWORD;C:QUARTERWORD;F:INTERNALFONT;I:FOURQUARTERS;
DELTA:SCALED;BEGIN FETCH(Q+4);IF(CURI.B0>0)THEN BEGIN I:=CURI;C:=CURC;
F:=CURF;X:=CLEANBOX(Q+1,2*(CURSTYLE DIV 2)+1);{707:}
WHILE TRUE DO BEGIN IF(I.B2 MOD 4)<>2 THEN GOTO 30;Y:=I.B3;
I:=FONTINFO[CHARBASE[F]+Y].QQQQ;
IF FONTINFO[WIDTHBASE[F]+I.B0].INT>MEM[X+1].INT THEN GOTO 30;C:=Y;END;
30:{:707};DELTA:=MEM[X+3].INT-FONTINFO[5+PARAMBASE[F]].INT;
IF DELTA<0 THEN DELTA:=0;Y:=CHARBOX(F,C);
MEM[Y+4].INT:=HALF(MEM[X+1].INT-MEM[Y+1].INT);MEM[Y+1].INT:=0;
P:=NEWKERN(DELTA-MEM[X+3].INT);MEM[P].HH.RH:=X;MEM[Y].HH.RH:=P;
Y:=VPACKAGE(Y,0,1,1073741823);MEM[Y+1].INT:=MEM[X+1].INT;
MEM[Q+1].HH.LH:=Y;MEM[Q+1].HH.RH:=2;END;END;{:706}{708:}
PROCEDURE MAKEFRACTION(Q:HALFWORD);VAR P,V,X,Y,Z:HALFWORD;
DELTA,DELTA1,DELTA2,SHIFTUP,SHIFTDOWN,CLR:SCALED;
BEGIN IF MEM[Q+1].INT=1073741824 THEN MEM[Q+1].INT:=FONTINFO[8+PARAMBASE
[EQTB[3164+CURSIZE].HH.RH]].INT;{709:}
X:=CLEANBOX(Q+2,CURSTYLE+2-2*(CURSTYLE DIV 6));
Z:=CLEANBOX(Q+3,2*(CURSTYLE DIV 2)+3-2*(CURSTYLE DIV 6));
IF MEM[X+1].INT<MEM[Z+1].INT THEN X:=REBOX(X,MEM[Z+1].INT)ELSE Z:=REBOX(
Z,MEM[X+1].INT);
IF CURSTYLE<2 THEN BEGIN SHIFTUP:=FONTINFO[8+PARAMBASE[EQTB[3163+CURSIZE
].HH.RH]].INT;
SHIFTDOWN:=FONTINFO[11+PARAMBASE[EQTB[3163+CURSIZE].HH.RH]].INT;
END ELSE BEGIN SHIFTDOWN:=FONTINFO[12+PARAMBASE[EQTB[3163+CURSIZE].HH.RH
]].INT;
IF MEM[Q+1].INT<>0 THEN SHIFTUP:=FONTINFO[9+PARAMBASE[EQTB[3163+CURSIZE]
.HH.RH]].INT ELSE SHIFTUP:=FONTINFO[10+PARAMBASE[EQTB[3163+CURSIZE].HH.
RH]].INT;END{:709};IF MEM[Q+1].INT=0 THEN{710:}
BEGIN IF CURSTYLE<2 THEN CLR:=7*FONTINFO[8+PARAMBASE[EQTB[3164+CURSIZE].
HH.RH]].INT ELSE CLR:=3*FONTINFO[8+PARAMBASE[EQTB[3164+CURSIZE].HH.RH]].
INT;DELTA:=HALF(CLR-((SHIFTUP-MEM[X+2].INT)-(MEM[Z+3].INT-SHIFTDOWN)));
IF DELTA>0 THEN BEGIN SHIFTUP:=SHIFTUP+DELTA;SHIFTDOWN:=SHIFTDOWN+DELTA;
END;END{:710}ELSE{711:}
BEGIN IF CURSTYLE<2 THEN CLR:=3*MEM[Q+1].INT ELSE CLR:=MEM[Q+1].INT;
DELTA:=HALF(MEM[Q+1].INT);
DELTA1:=CLR-((SHIFTUP-MEM[X+2].INT)-(FONTINFO[22+PARAMBASE[EQTB[3163+
CURSIZE].HH.RH]].INT+DELTA));
DELTA2:=CLR-((FONTINFO[22+PARAMBASE[EQTB[3163+CURSIZE].HH.RH]].INT-DELTA
)-(MEM[Z+3].INT-SHIFTDOWN));IF DELTA1>0 THEN SHIFTUP:=SHIFTUP+DELTA1;
IF DELTA2>0 THEN SHIFTDOWN:=SHIFTDOWN+DELTA2;END{:711};{712:}
V:=NEWNULLBOX;MEM[V].HH.B0:=1;MEM[V+3].INT:=SHIFTUP+MEM[X+3].INT;
MEM[V+2].INT:=MEM[Z+2].INT+SHIFTDOWN;MEM[V+1].INT:=MEM[X+1].INT;
IF MEM[Q+1].INT=0 THEN BEGIN P:=NEWKERN((SHIFTUP-MEM[X+2].INT)-(MEM[Z+3]
.INT-SHIFTDOWN));MEM[P].HH.RH:=Z;
END ELSE BEGIN Y:=FRACTIONRULE(MEM[Q+1].INT);
P:=NEWKERN((FONTINFO[22+PARAMBASE[EQTB[3163+CURSIZE].HH.RH]].INT-DELTA)-
(MEM[Z+3].INT-SHIFTDOWN));MEM[Y].HH.RH:=P;MEM[P].HH.RH:=Z;
P:=NEWKERN((SHIFTUP-MEM[X+2].INT)-(FONTINFO[22+PARAMBASE[EQTB[3163+
CURSIZE].HH.RH]].INT+DELTA));MEM[P].HH.RH:=Y;END;MEM[X].HH.RH:=P;
MEM[V+5].HH.RH:=X{:712};{713:}
IF CURSTYLE<2 THEN DELTA:=FONTINFO[20+PARAMBASE[EQTB[3163+CURSIZE].HH.RH
]].INT ELSE DELTA:=FONTINFO[21+PARAMBASE[EQTB[3163+CURSIZE].HH.RH]].INT;
X:=VARDELIMITER(Q+4,CURSIZE,DELTA);MEM[X].HH.RH:=V;
Z:=VARDELIMITER(Q+5,CURSIZE,DELTA);MEM[V].HH.RH:=Z;
MEM[Q+1].INT:=HPACK(X,0,1){:713};END;{:708}{714:}
FUNCTION MAKEOP(Q:HALFWORD):SCALED;VAR DELTA:SCALED;P,V,X,Y,Z:HALFWORD;
SHIFTUP,SHIFTDOWN:SCALED;
BEGIN IF(MEM[Q].HH.B1=0)AND(CURSTYLE<2)THEN MEM[Q].HH.B1:=1;
IF MEM[Q+1].HH.RH=1 THEN BEGIN FETCH(Q+1);
IF(CURSTYLE<2)AND((CURI.B2 MOD 4)=2)THEN BEGIN CURC:=CURI.B3;
MEM[Q+1].HH.B1:=CURC;CURI:=FONTINFO[CHARBASE[CURF]+CURC].QQQQ;END;
DELTA:=FONTINFO[ITALICBASE[CURF]+CURI.B2 DIV 4].INT;
X:=CLEANBOX(Q+1,CURSTYLE);
IF(MEM[Q+3].HH.RH<>0)AND(MEM[Q].HH.B1<>1)THEN MEM[X+1].INT:=MEM[X+1].INT
-DELTA;
MEM[X+4].INT:=HALF(MEM[X+3].INT-MEM[X+2].INT)-FONTINFO[22+PARAMBASE[EQTB
[3163+CURSIZE].HH.RH]].INT;MEM[Q+1].HH.RH:=2;MEM[Q+1].HH.LH:=X;
END ELSE DELTA:=0;IF MEM[Q].HH.B1=1 THEN{715:}
BEGIN X:=CLEANBOX(Q+2,2*(CURSTYLE DIV 4)+4+(CURSTYLE MOD 2));
Y:=CLEANBOX(Q+1,CURSTYLE);Z:=CLEANBOX(Q+3,2*(CURSTYLE DIV 4)+5);
V:=NEWNULLBOX;MEM[V].HH.B0:=1;MEM[V+1].INT:=MEM[Y+1].INT;
IF MEM[X+1].INT>MEM[V+1].INT THEN MEM[V+1].INT:=MEM[X+1].INT;
IF MEM[Z+1].INT>MEM[V+1].INT THEN MEM[V+1].INT:=MEM[Z+1].INT;
X:=REBOX(X,MEM[V+1].INT);Y:=REBOX(Y,MEM[V+1].INT);
Z:=REBOX(Z,MEM[V+1].INT);MEM[X+4].INT:=HALF(DELTA);
MEM[Z+4].INT:=-MEM[X+4].INT;MEM[V+3].INT:=MEM[Y+3].INT;
MEM[V+2].INT:=MEM[Y+2].INT;{716:}
IF MEM[Q+2].HH.RH=0 THEN BEGIN FREENODE(X,7);MEM[V+5].HH.RH:=Y;
END ELSE BEGIN SHIFTUP:=FONTINFO[11+PARAMBASE[EQTB[3164+CURSIZE].HH.RH]]
.INT-MEM[X+2].INT;
IF SHIFTUP<FONTINFO[9+PARAMBASE[EQTB[3164+CURSIZE].HH.RH]].INT THEN
SHIFTUP:=FONTINFO[9+PARAMBASE[EQTB[3164+CURSIZE].HH.RH]].INT;
P:=NEWKERN(SHIFTUP);MEM[P].HH.RH:=Y;MEM[X].HH.RH:=P;
P:=NEWKERN(FONTINFO[13+PARAMBASE[EQTB[3164+CURSIZE].HH.RH]].INT);
MEM[P].HH.RH:=X;MEM[V+5].HH.RH:=P;
MEM[V+3].INT:=MEM[V+3].INT+FONTINFO[13+PARAMBASE[EQTB[3164+CURSIZE].HH.
RH]].INT+MEM[X+3].INT+MEM[X+2].INT+SHIFTUP;END;
IF MEM[Q+3].HH.RH=0 THEN FREENODE(Z,7)ELSE BEGIN SHIFTDOWN:=FONTINFO[12+
PARAMBASE[EQTB[3164+CURSIZE].HH.RH]].INT-MEM[Z+3].INT;
IF SHIFTDOWN<FONTINFO[10+PARAMBASE[EQTB[3164+CURSIZE].HH.RH]].INT THEN
SHIFTDOWN:=FONTINFO[10+PARAMBASE[EQTB[3164+CURSIZE].HH.RH]].INT;
P:=NEWKERN(SHIFTDOWN);MEM[Y].HH.RH:=P;MEM[P].HH.RH:=Z;
P:=NEWKERN(FONTINFO[13+PARAMBASE[EQTB[3164+CURSIZE].HH.RH]].INT);
MEM[Z].HH.RH:=P;
MEM[V+2].INT:=MEM[V+2].INT+FONTINFO[13+PARAMBASE[EQTB[3164+CURSIZE].HH.
RH]].INT+MEM[Z+3].INT+MEM[Z+2].INT+SHIFTDOWN;END{:716};MEM[Q+1].INT:=V;
END{:715};MAKEOP:=DELTA;END;{:714}{717:}PROCEDURE MAKEORD(Q:HALFWORD);
LABEL 20,10;VAR A:INTEGER;P:HALFWORD;
BEGIN 20:IF(MEM[Q+3].HH.RH=0)AND(MEM[Q+2].HH.RH=0)AND(MEM[Q+1].HH.RH=1)
THEN BEGIN P:=MEM[Q].HH.RH;
IF P<>0 THEN IF(MEM[P].HH.B0>=16)AND(MEM[P].HH.B0<=22)THEN IF MEM[P+1].
HH.RH=1 THEN IF MEM[P+1].HH.B0=MEM[Q+1].HH.B0 THEN BEGIN MEM[Q+1].HH.RH
:=4;FETCH(Q+1);
IF(CURI.B2 MOD 4)=1 THEN BEGIN A:=LIGKERNBASE[CURF]+CURI.B3;
CURC:=MEM[P+1].HH.B1;REPEAT CURI:=FONTINFO[A].QQQQ;{718:}
IF CURI.B1=CURC THEN IF CURI.B2>=128 THEN BEGIN P:=NEWKERN(FONTINFO[
KERNBASE[CURF]+CURI.B3].INT);MEM[P].HH.RH:=MEM[Q].HH.RH;MEM[Q].HH.RH:=P;
GOTO 10;END ELSE BEGIN MEM[Q].HH.RH:=MEM[P].HH.RH;MEM[Q+1].HH.RH:=1;
MEM[Q+1].HH.B1:=CURI.B3;MEM[Q+3]:=MEM[P+3];MEM[Q+2]:=MEM[P+2];
FREENODE(P,4);GOTO 20;END{:718};A:=A+1;UNTIL CURI.B0>=128;END;END;END;
10:END;{:717}{721:}PROCEDURE MAKESCRIPTS(Q:HALFWORD;DELTA:SCALED);
VAR P,X,Y,Z:HALFWORD;SHIFTUP,SHIFTDOWN,CLR:SCALED;T:SMALLNUMBER;
BEGIN P:=MEM[Q+1].INT;IF(P>25000)THEN BEGIN SHIFTUP:=0;SHIFTDOWN:=0;
END ELSE BEGIN Z:=HPACK(P,0,1);IF CURSTYLE<4 THEN T:=16 ELSE T:=32;
SHIFTUP:=MEM[Z+3].INT-FONTINFO[18+PARAMBASE[EQTB[3163+T].HH.RH]].INT;
SHIFTDOWN:=MEM[Z+2].INT+FONTINFO[19+PARAMBASE[EQTB[3163+T].HH.RH]].INT;
FREENODE(Z,7);END;IF MEM[Q+2].HH.RH=0 THEN{722:}
BEGIN X:=CLEANBOX(Q+3,2*(CURSTYLE DIV 4)+5);
MEM[X+1].INT:=MEM[X+1].INT+EQTB[4290].INT;
IF SHIFTDOWN<FONTINFO[16+PARAMBASE[EQTB[3163+CURSIZE].HH.RH]].INT THEN
SHIFTDOWN:=FONTINFO[16+PARAMBASE[EQTB[3163+CURSIZE].HH.RH]].INT;
CLR:=MEM[X+3].INT-(ABS(FONTINFO[5+PARAMBASE[EQTB[3163+CURSIZE].HH.RH]].
INT*4)DIV 5);IF SHIFTDOWN<CLR THEN SHIFTDOWN:=CLR;
MEM[X+4].INT:=SHIFTDOWN;END{:722}ELSE BEGIN{723:}
BEGIN X:=CLEANBOX(Q+2,2*(CURSTYLE DIV 4)+4+(CURSTYLE MOD 2));
MEM[X+1].INT:=MEM[X+1].INT+EQTB[4290].INT;
IF ODD(CURSTYLE)THEN CLR:=FONTINFO[15+PARAMBASE[EQTB[3163+CURSIZE].HH.RH
]].INT ELSE IF CURSTYLE<2 THEN CLR:=FONTINFO[13+PARAMBASE[EQTB[3163+
CURSIZE].HH.RH]].INT ELSE CLR:=FONTINFO[14+PARAMBASE[EQTB[3163+CURSIZE].
HH.RH]].INT;IF SHIFTUP<CLR THEN SHIFTUP:=CLR;
CLR:=MEM[X+2].INT+(ABS(FONTINFO[5+PARAMBASE[EQTB[3163+CURSIZE].HH.RH]].
INT)DIV 4);IF SHIFTUP<CLR THEN SHIFTUP:=CLR;END{:723};
IF MEM[Q+3].HH.RH=0 THEN MEM[X+4].INT:=-SHIFTUP ELSE{724:}
BEGIN Y:=CLEANBOX(Q+3,2*(CURSTYLE DIV 4)+5);
MEM[Y+1].INT:=MEM[Y+1].INT+EQTB[4290].INT;
IF SHIFTDOWN<FONTINFO[17+PARAMBASE[EQTB[3163+CURSIZE].HH.RH]].INT THEN
SHIFTDOWN:=FONTINFO[17+PARAMBASE[EQTB[3163+CURSIZE].HH.RH]].INT;
CLR:=4*FONTINFO[8+PARAMBASE[EQTB[3164+CURSIZE].HH.RH]].INT-((SHIFTUP-MEM
[X+2].INT)-(MEM[Y+3].INT-SHIFTDOWN));
IF CLR>0 THEN BEGIN SHIFTDOWN:=SHIFTDOWN+CLR;
CLR:=(ABS(FONTINFO[5+PARAMBASE[EQTB[3163+CURSIZE].HH.RH]].INT*4)DIV 5)-(
SHIFTUP-MEM[X+2].INT);IF CLR>0 THEN BEGIN SHIFTUP:=SHIFTUP+CLR;
SHIFTDOWN:=SHIFTDOWN-CLR;END;END;MEM[X+4].INT:=DELTA;
P:=NEWKERN((SHIFTUP-MEM[X+2].INT)-(MEM[Y+3].INT-SHIFTDOWN));
MEM[X].HH.RH:=P;MEM[P].HH.RH:=Y;X:=VPACKAGE(X,0,1,1073741823);
MEM[X+4].INT:=SHIFTDOWN;END{:724};END;
IF MEM[Q+1].INT=0 THEN MEM[Q+1].INT:=X ELSE BEGIN P:=MEM[Q+1].INT;
WHILE MEM[P].HH.RH<>0 DO P:=MEM[P].HH.RH;MEM[P].HH.RH:=X;END;END;{:721}
{727:}FUNCTION MAKELEFTRIGH(Q:HALFWORD;STYLE:SMALLNUMBER;
MAXD,MAXH:SCALED):SMALLNUMBER;VAR DELTA,DELTA1,DELTA2:SCALED;
BEGIN IF STYLE<4 THEN CURSIZE:=0 ELSE CURSIZE:=16*((STYLE-2)DIV 2);
DELTA2:=MAXD+FONTINFO[22+PARAMBASE[EQTB[3163+CURSIZE].HH.RH]].INT;
DELTA1:=MAXH+MAXD-DELTA2;IF DELTA2>DELTA1 THEN DELTA1:=DELTA2;
DELTA:=(ABS(EQTB[3868].INT)DIV 500)*DELTA1;
DELTA2:=DELTA1+DELTA1-EQTB[4288].INT;IF DELTA<DELTA2 THEN DELTA:=DELTA2;
MEM[Q+1].INT:=VARDELIMITER(Q+1,CURSIZE,DELTA);
MAKELEFTRIGH:=MEM[Q].HH.B0-(10);END;{:727}PROCEDURE MLISTTOHLIST;
LABEL 21,82,80,81,83,30;VAR MLIST:HALFWORD;PENALTIES:BOOLEAN;
STYLE:SMALLNUMBER;SAVESTYLE:SMALLNUMBER;Q:HALFWORD;R:HALFWORD;
RTYPE:SMALLNUMBER;T:SMALLNUMBER;P,X,Y,Z:HALFWORD;PEN:INTEGER;
S:SMALLNUMBER;MAXH,MAXD:SCALED;DELTA:SCALED;BEGIN MLIST:=CURMLIST;
PENALTIES:=MLISTPENALTI;STYLE:=CURSTYLE;Q:=MLIST;R:=0;RTYPE:=17;MAXH:=0;
MAXD:=0;{671:}
BEGIN IF CURSTYLE<4 THEN CURSIZE:=0 ELSE CURSIZE:=16*((CURSTYLE-2)DIV 2)
;CURMU:=XOVERN(FONTINFO[6+PARAMBASE[EQTB[3163+CURSIZE].HH.RH]].INT,18);
END{:671};WHILE Q<>0 DO{695:}BEGIN{696:}21:DELTA:=0;
CASE MEM[Q].HH.B0 OF 18:CASE RTYPE OF 18,17,19,20,22,30:BEGIN MEM[Q].HH.
B0:=16;GOTO 21;END;OTHERS:END;19,21,22,31:BEGIN{697:}
IF RTYPE=18 THEN MEM[R].HH.B0:=16{:697};IF MEM[Q].HH.B0=31 THEN GOTO 80;
END;{701:}30:GOTO 80;25:BEGIN MAKEFRACTION(Q);GOTO 82;END;
17:BEGIN DELTA:=MAKEOP(Q);IF MEM[Q].HH.B1=1 THEN GOTO 82;END;
16:MAKEORD(Q);20,23:;24:MAKERADICAL(Q);27:MAKEOVER(Q);26:MAKEUNDER(Q);
28:MAKEMATHACCE(Q);29:MAKEVCENTER(Q);{:701}{698:}
14:BEGIN CURSTYLE:=MEM[Q].HH.B1;{671:}
BEGIN IF CURSTYLE<4 THEN CURSIZE:=0 ELSE CURSIZE:=16*((CURSTYLE-2)DIV 2)
;CURMU:=XOVERN(FONTINFO[6+PARAMBASE[EQTB[3163+CURSIZE].HH.RH]].INT,18);
END{:671};GOTO 81;END;15:{699:}
BEGIN CASE CURSTYLE DIV 2 OF 0:BEGIN P:=MEM[Q+1].HH.LH;
MEM[Q+1].HH.LH:=0;END;1:BEGIN P:=MEM[Q+1].HH.RH;MEM[Q+1].HH.RH:=0;END;
2:BEGIN P:=MEM[Q+2].HH.LH;MEM[Q+2].HH.LH:=0;END;
3:BEGIN P:=MEM[Q+2].HH.RH;MEM[Q+2].HH.RH:=0;END;END;
FLUSHNODELIS(MEM[Q+1].HH.LH);FLUSHNODELIS(MEM[Q+1].HH.RH);
FLUSHNODELIS(MEM[Q+2].HH.LH);FLUSHNODELIS(MEM[Q+2].HH.RH);
MEM[Q].HH.B0:=14;MEM[Q].HH.B1:=CURSTYLE;MEM[Q+1].INT:=0;MEM[Q+2].INT:=0;
IF P<>0 THEN BEGIN WHILE MEM[P].HH.RH<>0 DO P:=MEM[P].HH.RH;
MEM[P].HH.RH:=MEM[Q].HH.RH;MEM[Q].HH.RH:=P;END;GOTO 81;END{:699};
8,12,7:GOTO 81;2:BEGIN IF MEM[Q+3].INT>MAXH THEN MAXH:=MEM[Q+3].INT;
IF MEM[Q+2].INT>MAXD THEN MAXD:=MEM[Q+2].INT;GOTO 81;END;10:BEGIN{700:}
IF MEM[Q].HH.B1=99 THEN BEGIN X:=MEM[Q+1].HH.LH;Y:=MATHGLUE(X,CURMU);
DELETEGLUERE(X);MEM[Q+1].HH.LH:=Y;MEM[Q].HH.B1:=0;
END ELSE IF(CURSIZE<>0)AND(MEM[Q].HH.B1=98)THEN BEGIN P:=MEM[Q].HH.RH;
IF P<>0 THEN IF(MEM[P].HH.B0=10)OR(MEM[P].HH.B0=11)THEN BEGIN MEM[Q].HH.
RH:=MEM[P].HH.RH;MEM[P].HH.RH:=0;FLUSHNODELIS(P);END;END{:700};GOTO 81;
END;11:BEGIN MATHKERN(Q,CURMU);GOTO 81;END;{:698}
OTHERS:CONFUSION(711)END;{719:}CASE MEM[Q+1].HH.RH OF 1,4:{720:}
BEGIN FETCH(Q+1);
IF(CURI.B0>0)THEN BEGIN DELTA:=FONTINFO[ITALICBASE[CURF]+CURI.B2 DIV 4].
INT;P:=NEWCHARACTER(CURF,CURC);
IF(MEM[Q+1].HH.RH=4)AND(FONTINFO[2+PARAMBASE[CURF]].INT<>0)THEN DELTA:=0
;
IF(MEM[Q+3].HH.RH=0)AND(DELTA<>0)THEN BEGIN MEM[P].HH.RH:=NEWKERN(DELTA)
;DELTA:=0;END;END ELSE P:=0;END{:720};0:P:=0;2:P:=MEM[Q+1].HH.LH;
3:BEGIN CURMLIST:=MEM[Q+1].HH.LH;SAVESTYLE:=CURSTYLE;
MLISTPENALTI:=FALSE;MLISTTOHLIST;CURSTYLE:=SAVESTYLE;{671:}
BEGIN IF CURSTYLE<4 THEN CURSIZE:=0 ELSE CURSIZE:=16*((CURSTYLE-2)DIV 2)
;CURMU:=XOVERN(FONTINFO[6+PARAMBASE[EQTB[3163+CURSIZE].HH.RH]].INT,18);
END{:671};P:=HPACK(MEM[25003].HH.RH,0,1);END;OTHERS:CONFUSION(712)END;
MEM[Q+1].INT:=P;IF(MEM[Q+3].HH.RH=0)AND(MEM[Q+2].HH.RH=0)THEN GOTO 82;
MAKESCRIPTS(Q,DELTA){:719}{:696};82:Z:=HPACK(MEM[Q+1].INT,0,1);
IF MEM[Z+3].INT>MAXH THEN MAXH:=MEM[Z+3].INT;
IF MEM[Z+2].INT>MAXD THEN MAXD:=MEM[Z+2].INT;FREENODE(Z,7);80:R:=Q;
RTYPE:=MEM[R].HH.B0;81:Q:=MEM[Q].HH.RH;END{:695};{697:}
IF RTYPE=18 THEN MEM[R].HH.B0:=16{:697};{725:}P:=25003;MEM[P].HH.RH:=0;
Q:=MLIST;RTYPE:=0;CURSTYLE:=STYLE;{671:}
BEGIN IF CURSTYLE<4 THEN CURSIZE:=0 ELSE CURSIZE:=16*((CURSTYLE-2)DIV 2)
;CURMU:=XOVERN(FONTINFO[6+PARAMBASE[EQTB[3163+CURSIZE].HH.RH]].INT,18);
END{:671};WHILE Q<>0 DO BEGIN{726:}T:=16;S:=4;PEN:=10000;
CASE MEM[Q].HH.B0 OF 17,20,21,22,23:T:=MEM[Q].HH.B0;18:BEGIN T:=18;
PEN:=EQTB[3859].INT;END;19:BEGIN T:=19;PEN:=EQTB[3860].INT;END;
16,29,27,26:;24:S:=5;28:S:=5;25:BEGIN T:=23;S:=6;END;
30,31:T:=MAKELEFTRIGH(Q,STYLE,MAXD,MAXH);14:{728:}
BEGIN CURSTYLE:=MEM[Q].HH.B1;S:=3;{671:}
BEGIN IF CURSTYLE<4 THEN CURSIZE:=0 ELSE CURSIZE:=16*((CURSTYLE-2)DIV 2)
;CURMU:=XOVERN(FONTINFO[6+PARAMBASE[EQTB[3163+CURSIZE].HH.RH]].INT,18);
END{:671};GOTO 83;END{:728};8,12,2,7,10,11:BEGIN MEM[P].HH.RH:=Q;P:=Q;
Q:=MEM[Q].HH.RH;MEM[P].HH.RH:=0;GOTO 30;END;
OTHERS:CONFUSION(713)END{:726};{731:}
IF RTYPE>0 THEN BEGIN CASE STRPOOL[RTYPE*8+T+MAGICOFFSET]OF 48:X:=0;
49:IF CURSTYLE<4 THEN X:=14 ELSE X:=0;50:X:=14;
51:IF CURSTYLE<4 THEN X:=15 ELSE X:=0;
52:IF CURSTYLE<4 THEN X:=16 ELSE X:=0;OTHERS:CONFUSION(715)END;
IF X<>0 THEN BEGIN Y:=MATHGLUE(EQTB[2369+X].HH.RH,CURMU);Z:=NEWGLUE(Y);
MEM[Y].HH.RH:=0;MEM[P].HH.RH:=Z;P:=Z;MEM[Z].HH.B1:=X+1;END;END{:731};
{732:}IF MEM[Q+1].INT<>0 THEN BEGIN MEM[P].HH.RH:=MEM[Q+1].INT;
REPEAT P:=MEM[P].HH.RH;UNTIL MEM[P].HH.RH=0;END;
IF PENALTIES THEN IF MEM[Q].HH.RH<>0 THEN IF PEN<10000 THEN BEGIN RTYPE
:=MEM[MEM[Q].HH.RH].HH.B0;
IF RTYPE<>12 THEN IF RTYPE<>19 THEN BEGIN Z:=NEWPENALTY(PEN);
MEM[P].HH.RH:=Z;P:=Z;END;END{:732};RTYPE:=T;83:R:=Q;Q:=MEM[Q].HH.RH;
FREENODE(R,S);30:END{:725};END;{:694}{737:}PROCEDURE PUSHALIGNMEN;
VAR P:HALFWORD;BEGIN P:=GETNODE(3);MEM[P].HH.RH:=ALIGNPTR;
MEM[P].HH.LH:=CURALIGN;MEM[P+1].HH.LH:=MEM[25008].HH.RH;
MEM[P+1].HH.RH:=CURSPAN;MEM[P+2].INT:=ALIGNSTATE;ALIGNPTR:=P;END;
PROCEDURE POPALIGNMENT;VAR P:HALFWORD;BEGIN P:=ALIGNPTR;
ALIGNSTATE:=MEM[P+2].INT;CURSPAN:=MEM[P+1].HH.RH;
MEM[25008].HH.RH:=MEM[P+1].HH.LH;CURALIGN:=MEM[P].HH.LH;
ALIGNPTR:=MEM[P].HH.RH;FREENODE(P,3);END;{:737}{739:}{746:}
PROCEDURE GETPREAMBLET;LABEL 20;BEGIN 20:GETTOKEN;
WHILE(CURCHR=128)AND(CURCMD=4)DO GETXTOKEN;
IF(CURCMD=73)AND(CURCHR=10)THEN BEGIN SCANOPTIONAL;SCANGLUE(2);
EQDEFINE(2379,111,CURVAL);GOTO 20;END;END;{:746}PROCEDURE ALIGNPEEK;
FORWARD;PROCEDURE OFFSAVE;FORWARD;PROCEDURE NORMALPARAGR;FORWARD;
PROCEDURE INITALIGN;LABEL 30,31,32,22;VAR SAVECSPTR:HALFWORD;P:HALFWORD;
BEGIN SAVECSPTR:=CSPTR;PUSHALIGNMEN;ALIGNSTATE:=-1000000;{741:}
IF(CURLIST.MODEFIELD=197)AND((CURLIST.TAILFIELD<>CURLIST.HEADFIELD)OR(
CURLIST.AUXFIELD<>0))THEN BEGIN PRINTNL(716);BEGIN HELPPTR:=3;
HELPLINE[2]:=717;HELPLINE[1]:=718;HELPLINE[0]:=719;END;ERROR;FLUSHMATH;
END{:741};PUSHNEST;{740:}
IF CURLIST.MODEFIELD=197 THEN BEGIN CURLIST.MODEFIELD:=-1;
CURLIST.AUXFIELD:=NEST[NESTPTR-2].AUXFIELD;
END ELSE IF CURLIST.MODEFIELD>0 THEN CURLIST.MODEFIELD:=-CURLIST.
MODEFIELD{:740};SCANSPEC;NEWSAVELEVEL(5);{742:}MEM[25008].HH.RH:=0;
CURALIGN:=25008;SCANNERSTATU:=4;WARNINGINDEX:=SAVECSPTR;
WHILE TRUE DO BEGIN{743:}MEM[CURALIGN].HH.RH:=NEWPARAMGLUE(10);
CURALIGN:=MEM[CURALIGN].HH.RH{:743};IF CURCMD=5 THEN GOTO 30;{744:}
{747:}P:=25004;MEM[P].HH.RH:=0;WHILE TRUE DO BEGIN GETPREAMBLET;
IF CURCMD=6 THEN GOTO 31;
IF(CURCMD<=5)AND(CURCMD>=4)AND(ALIGNSTATE=-999999)THEN BEGIN PRINTNL(721
);BEGIN HELPPTR:=3;HELPLINE[2]:=722;HELPLINE[1]:=723;HELPLINE[0]:=724;
END;BACKERROR;GOTO 31;END;
IF(CURCMD<>10)OR(P<>25004)THEN BEGIN MEM[P].HH.RH:=GETAVAIL;
P:=MEM[P].HH.RH;MEM[P].HH.LH:=CURTOK;END;END;31:{:747};
MEM[CURALIGN].HH.RH:=NEWNULLBOX;CURALIGN:=MEM[CURALIGN].HH.RH;
MEM[CURALIGN].HH.LH:=25009;MEM[CURALIGN+1].INT:=-1073741824;
MEM[CURALIGN+3].INT:=MEM[25004].HH.RH;{748:}P:=25004;MEM[P].HH.RH:=0;
WHILE TRUE DO BEGIN 22:GETPREAMBLET;
IF(CURCMD<=5)AND(CURCMD>=4)AND(ALIGNSTATE=-999999)THEN GOTO 32;
IF CURCMD=6 THEN BEGIN PRINTNL(725);BEGIN HELPPTR:=3;HELPLINE[2]:=722;
HELPLINE[1]:=723;HELPLINE[0]:=726;END;ERROR;GOTO 22;END;
MEM[P].HH.RH:=GETAVAIL;P:=MEM[P].HH.RH;MEM[P].HH.LH:=CURTOK;END;
32:MEM[P].HH.RH:=GETAVAIL;P:=MEM[P].HH.RH;MEM[P].HH.LH:=6459{:748};
MEM[CURALIGN+2].INT:=MEM[25004].HH.RH{:744};END;30:SCANNERSTATU:=0{:742}
;NEWSAVELEVEL(5);ALIGNPEEK;END;{:739}{750:}{751:}
PROCEDURE INITSPAN(P:HALFWORD);BEGIN PUSHNEST;
IF CURLIST.MODEFIELD=-99 THEN CURLIST.AUXFIELD:=1000 ELSE BEGIN CURLIST.
AUXFIELD:=-65536000;NORMALPARAGR;END;CURSPAN:=P;END;{:751}
PROCEDURE INITROW;BEGIN PUSHNEST;
CURLIST.MODEFIELD:=(-100)-CURLIST.MODEFIELD;
BEGIN MEM[CURLIST.TAILFIELD].HH.RH:=NEWGLUE(MEM[MEM[25008].HH.RH+1].HH.
LH);CURLIST.TAILFIELD:=MEM[CURLIST.TAILFIELD].HH.RH;END;
MEM[CURLIST.TAILFIELD].HH.B1:=11;CURALIGN:=MEM[MEM[25008].HH.RH].HH.RH;
INITSPAN(CURALIGN);END;{:750}{752:}PROCEDURE INITCOL;
BEGIN MEM[CURALIGN+5].HH.LH:=CURCMD;
IF CURCMD=61 THEN ALIGNSTATE:=0 ELSE BEGIN BACKINPUT;
BEGINTOKENLI(MEM[CURALIGN+3].INT,1);END;END;{:752}{755:}
FUNCTION FINCOL:BOOLEAN;LABEL 10;VAR P:HALFWORD;Q:HALFWORD;S:HALFWORD;
U:HALFWORD;W:SCALED;O:GLUEORD;N:HALFWORD;
BEGIN IF(CURALIGN=0)OR(MEM[CURALIGN].HH.RH=0)THEN CONFUSION(728);
P:=MEM[MEM[CURALIGN].HH.RH].HH.RH;{756:}
IF(P=0)AND(MEM[CURALIGN+5].HH.LH<>129)THEN BEGIN PRINTNL(729);
BEGIN HELPPTR:=3;HELPLINE[2]:=730;HELPLINE[1]:=731;HELPLINE[0]:=732;END;
MEM[CURALIGN+5].HH.LH:=129;ERROR;END{:756};
IF MEM[CURALIGN+5].HH.LH<>128 THEN BEGIN UNSAVE;NEWSAVELEVEL(5);{758:}
BEGIN IF CURLIST.MODEFIELD=-99 THEN BEGIN U:=HPACK(MEM[CURLIST.HEADFIELD
].HH.RH,0,1);W:=MEM[U+1].INT;
END ELSE BEGIN U:=VPACKAGE(MEM[CURLIST.HEADFIELD].HH.RH,0,1,0);
W:=MEM[U+3].INT;END;N:=0;IF CURSPAN<>CURALIGN THEN{760:}
BEGIN Q:=CURSPAN;REPEAT N:=N+1;Q:=MEM[MEM[Q].HH.RH].HH.RH;
UNTIL Q=CURALIGN;IF N>511 THEN CONFUSION(733);Q:=CURSPAN;
WHILE MEM[MEM[Q].HH.LH].HH.RH<N DO Q:=MEM[Q].HH.LH;
IF MEM[MEM[Q].HH.LH].HH.RH>N THEN BEGIN S:=GETNODE(2);
MEM[S].HH.LH:=MEM[Q].HH.LH;MEM[S].HH.RH:=N;MEM[Q].HH.LH:=S;
MEM[S+1].INT:=W;
END ELSE IF MEM[MEM[Q].HH.LH+1].INT<W THEN MEM[MEM[Q].HH.LH+1].INT:=W;
END{:760}ELSE IF W>MEM[CURALIGN+1].INT THEN MEM[CURALIGN+1].INT:=W;
MEM[U].HH.B0:=13;MEM[U].HH.B1:=N;{628:}
IF TOTALSTRETCH[3]<>0 THEN O:=3 ELSE IF TOTALSTRETCH[2]<>0 THEN O:=2
ELSE IF TOTALSTRETCH[1]<>0 THEN O:=1 ELSE O:=0{:628};MEM[U+5].HH.B1:=O;
MEM[U+6].INT:=TOTALSTRETCH[O];{634:}
IF TOTALSHRINK[3]<>0 THEN O:=3 ELSE IF TOTALSHRINK[2]<>0 THEN O:=2 ELSE
IF TOTALSHRINK[1]<>0 THEN O:=1 ELSE O:=0{:634};MEM[U+5].HH.B0:=O;
MEM[U+4].INT:=TOTALSHRINK[O];POPNEST;MEM[CURLIST.TAILFIELD].HH.RH:=U;
CURLIST.TAILFIELD:=U;END{:758};{757:}
BEGIN MEM[CURLIST.TAILFIELD].HH.RH:=NEWGLUE(MEM[MEM[CURALIGN].HH.RH+1].
HH.LH);CURLIST.TAILFIELD:=MEM[CURLIST.TAILFIELD].HH.RH;END;
MEM[CURLIST.TAILFIELD].HH.B1:=11{:757};
IF MEM[CURALIGN+5].HH.LH=129 THEN BEGIN FINCOL:=TRUE;GOTO 10;END;
INITSPAN(P);END;ALIGNSTATE:=1000000;{384:}REPEAT GETXTOKEN;
UNTIL CURCMD<>10{:384};CURALIGN:=P;INITCOL;FINCOL:=FALSE;10:END;{:755}
{761:}PROCEDURE FINROW;VAR P:HALFWORD;
BEGIN IF CURLIST.MODEFIELD=-99 THEN BEGIN P:=HPACK(MEM[CURLIST.HEADFIELD
].HH.RH,0,1);POPNEST;APPENDTOVLIS(P);
END ELSE BEGIN P:=VPACKAGE(MEM[CURLIST.HEADFIELD].HH.RH,0,1,1073741823);
POPNEST;MEM[CURLIST.TAILFIELD].HH.RH:=P;CURLIST.TAILFIELD:=P;
CURLIST.AUXFIELD:=1000;END;MEM[P].HH.B0:=13;MEM[P+6].INT:=0;ALIGNPEEK;
END;{:761}{762:}PROCEDURE DOASSIGNMENT;FORWARD;PROCEDURE RESUMEAFTERD;
FORWARD;PROCEDURE BUILDPAGE;FORWARD;PROCEDURE FINALIGN;
VAR P,Q,R,S,U:HALFWORD;T:SCALED;O:SCALED;N:HALFWORD;RULESAVE:SCALED;
BEGIN IF CURGROUP<>5 THEN CONFUSION(734);UNSAVE;
IF CURGROUP<>5 THEN CONFUSION(735);UNSAVE;
IF NEST[NESTPTR-1].MODEFIELD=197 THEN O:=EQTB[4293].INT ELSE O:=0;{763:}
Q:=MEM[MEM[25008].HH.RH].HH.RH;REPEAT FLUSHLIST(MEM[Q+3].INT);
FLUSHLIST(MEM[Q+2].INT);P:=MEM[MEM[Q].HH.RH].HH.RH;
IF MEM[Q+1].INT=-1073741824 THEN{764:}BEGIN MEM[Q+1].INT:=0;
R:=MEM[Q].HH.RH;S:=MEM[R+1].HH.LH;
IF S<>0 THEN BEGIN MEM[0].HH.RH:=MEM[0].HH.RH+1;DELETEGLUERE(S);
MEM[R+1].HH.LH:=0;END;END{:764};IF MEM[Q].HH.LH<>25009 THEN{765:}
BEGIN T:=MEM[Q+1].INT+MEM[MEM[MEM[Q].HH.RH+1].HH.LH+1].INT;
R:=MEM[Q].HH.LH;S:=25009;MEM[S].HH.LH:=P;N:=1;
REPEAT MEM[R+1].INT:=MEM[R+1].INT-T;U:=MEM[R].HH.LH;
WHILE MEM[R].HH.RH>N DO BEGIN S:=MEM[S].HH.LH;
N:=MEM[MEM[S].HH.LH].HH.RH+1;END;
IF MEM[R].HH.RH<N THEN BEGIN MEM[R].HH.LH:=MEM[S].HH.LH;MEM[S].HH.LH:=R;
MEM[R].HH.RH:=MEM[R].HH.RH-1;S:=R;
END ELSE BEGIN IF MEM[R+1].INT>MEM[MEM[S].HH.LH+1].INT THEN MEM[MEM[S].
HH.LH+1].INT:=MEM[R+1].INT;FREENODE(R,2);END;R:=U;UNTIL R=25009;
END{:765};MEM[Q].HH.B0:=13;MEM[Q].HH.B1:=0;MEM[Q+3].INT:=0;
MEM[Q+2].INT:=0;MEM[Q+5].HH.B1:=0;MEM[Q+5].HH.B0:=0;MEM[Q+6].INT:=0;
MEM[Q+4].INT:=0;Q:=P;UNTIL Q=0{:763};{766:}SAVEPTR:=SAVEPTR-2;
IF CURLIST.MODEFIELD=-1 THEN BEGIN RULESAVE:=EQTB[4294].INT;
EQTB[4294].INT:=0;
P:=HPACK(MEM[25008].HH.RH,SAVESTACK[SAVEPTR+1].INT,SAVESTACK[SAVEPTR+0].
INT);EQTB[4294].INT:=RULESAVE;
END ELSE BEGIN Q:=MEM[MEM[25008].HH.RH].HH.RH;
REPEAT MEM[Q+3].INT:=MEM[Q+1].INT;MEM[Q+1].INT:=0;
Q:=MEM[MEM[Q].HH.RH].HH.RH;UNTIL Q=0;
P:=VPACKAGE(MEM[25008].HH.RH,SAVESTACK[SAVEPTR+1].INT,SAVESTACK[SAVEPTR
+0].INT,1073741823);Q:=MEM[MEM[25008].HH.RH].HH.RH;
REPEAT MEM[Q+1].INT:=MEM[Q+3].INT;MEM[Q+3].INT:=0;
Q:=MEM[MEM[Q].HH.RH].HH.RH;UNTIL Q=0;END;Q:=P+5;REPEAT Q:=MEM[Q].HH.RH;
R:=MEM[Q+1].HH.LH;MEM[Q].HH.B0:=11;MEM[Q].HH.B1:=0;
IF MEM[P+5].HH.B0=0 THEN MEM[Q+1].INT:=MEM[R+1].INT ELSE IF MEM[P+5].HH.
B0=1 THEN IF MEM[R].HH.B0<>MEM[P+5].HH.B1 THEN MEM[Q+1].INT:=MEM[R+1].
INT ELSE MEM[Q+1].INT:=MEM[R+1].INT+ROUND(MEM[P+6].GR*MEM[R+2].INT)ELSE
IF MEM[R].HH.B1<>MEM[P+5].HH.B1 THEN MEM[Q+1].INT:=MEM[R+1].INT ELSE MEM
[Q+1].INT:=MEM[R+1].INT-ROUND(MEM[P+6].GR*MEM[R+3].INT);DELETEGLUERE(R);
Q:=MEM[Q].HH.RH;UNTIL Q=0{:766};{767:}Q:=MEM[CURLIST.HEADFIELD].HH.RH;
WHILE Q<>0 DO BEGIN IF MEM[Q].HH.B0=13 THEN{768:}
BEGIN IF CURLIST.MODEFIELD=-1 THEN BEGIN MEM[Q].HH.B0:=0;
MEM[Q+1].INT:=MEM[P+1].INT;END ELSE BEGIN MEM[Q].HH.B0:=1;
MEM[Q+3].INT:=MEM[P+3].INT;END;MEM[Q+5].HH.B1:=MEM[P+5].HH.B1;
MEM[Q+5].HH.B0:=MEM[P+5].HH.B0;MEM[Q+6].GR:=MEM[P+6].GR;MEM[Q+4].INT:=O;
R:=MEM[MEM[Q+5].HH.RH].HH.RH;S:=MEM[MEM[P+5].HH.RH].HH.RH;REPEAT{769:}
N:=MEM[R].HH.B1;T:=MEM[S+1].INT;WHILE N>0 DO BEGIN N:=N-1;
S:=MEM[S].HH.RH;T:=T+MEM[S+1].INT;S:=MEM[S].HH.RH;T:=T+MEM[S+1].INT;END;
IF CURLIST.MODEFIELD=-1 THEN{770:}BEGIN MEM[R+3].INT:=MEM[Q+3].INT;
MEM[R+2].INT:=MEM[Q+2].INT;
IF T=MEM[R+1].INT THEN BEGIN MEM[R+5].HH.B0:=0;MEM[R+5].HH.B1:=0;
MEM[R+6].GR:=0.0;
END ELSE IF T>MEM[R+1].INT THEN BEGIN MEM[R+5].HH.B0:=1;
IF MEM[R+6].INT=0 THEN MEM[R+6].GR:=0.0 ELSE MEM[R+6].GR:=(T-MEM[R+1].
INT)/MEM[R+6].INT;END ELSE BEGIN MEM[R+5].HH.B1:=MEM[R+5].HH.B0;
MEM[R+5].HH.B0:=2;
IF MEM[R+4].INT=0 THEN MEM[R+6].GR:=0.0 ELSE MEM[R+6].GR:=(MEM[R+1].INT-
T)/MEM[R+4].INT;END;MEM[R+1].INT:=T;MEM[R].HH.B0:=0;END{:770}ELSE{771:}
BEGIN MEM[R+1].INT:=MEM[Q+1].INT;
IF T=MEM[R+3].INT THEN BEGIN MEM[R+5].HH.B0:=0;MEM[R+5].HH.B1:=0;
MEM[R+6].GR:=0.0;
END ELSE IF T>MEM[R+3].INT THEN BEGIN MEM[R+5].HH.B0:=1;
IF MEM[R+6].INT=0 THEN MEM[R+6].GR:=0.0 ELSE MEM[R+6].GR:=(T-MEM[R+3].
INT)/MEM[R+6].INT;END ELSE BEGIN MEM[R+5].HH.B1:=MEM[R+5].HH.B0;
MEM[R+5].HH.B0:=2;
IF MEM[R+4].INT=0 THEN MEM[R+6].GR:=0.0 ELSE MEM[R+6].GR:=(MEM[R+3].INT-
T)/MEM[R+4].INT;END;MEM[R+3].INT:=T;MEM[R].HH.B0:=1;END{:771};
MEM[R+4].INT:=0;IF MEM[R].HH.B1>0 THEN BEGIN T:=NEWKERN(0);
MEM[T].HH.RH:=MEM[R].HH.RH;MEM[R].HH.RH:=T;R:=T;END{:769};
R:=MEM[MEM[R].HH.RH].HH.RH;S:=MEM[MEM[S].HH.RH].HH.RH;UNTIL R=0;
END{:768};Q:=MEM[Q].HH.RH;END{:767};FLUSHNODELIS(P);POPALIGNMENT;{772:}
T:=CURLIST.AUXFIELD;P:=MEM[CURLIST.HEADFIELD].HH.RH;
Q:=CURLIST.TAILFIELD;POPNEST;IF CURLIST.MODEFIELD=197 THEN{1167:}
BEGIN DOASSIGNMENT;IF CURCMD<>3 THEN{1168:}BEGIN PRINTNL(978);
BEGIN HELPPTR:=2;HELPLINE[1]:=717;HELPLINE[0]:=718;END;BACKERROR;
END{:1168}ELSE{1158:}BEGIN GETXTOKEN;
IF CURCMD<>3 THEN BEGIN PRINTNL(974);BEGIN HELPPTR:=2;HELPLINE[1]:=975;
HELPLINE[0]:=976;END;BACKERROR;END;END{:1158};POPNEST;
BEGIN MEM[CURLIST.TAILFIELD].HH.RH:=NEWPENALTY(EQTB[3861].INT);
CURLIST.TAILFIELD:=MEM[CURLIST.TAILFIELD].HH.RH;END;
BEGIN MEM[CURLIST.TAILFIELD].HH.RH:=NEWPARAMGLUE(3);
CURLIST.TAILFIELD:=MEM[CURLIST.TAILFIELD].HH.RH;END;
MEM[CURLIST.TAILFIELD].HH.RH:=P;IF P<>0 THEN CURLIST.TAILFIELD:=Q;
BEGIN MEM[CURLIST.TAILFIELD].HH.RH:=NEWPENALTY(EQTB[3862].INT);
CURLIST.TAILFIELD:=MEM[CURLIST.TAILFIELD].HH.RH;END;
BEGIN MEM[CURLIST.TAILFIELD].HH.RH:=NEWPARAMGLUE(3);
CURLIST.TAILFIELD:=MEM[CURLIST.TAILFIELD].HH.RH;END;CURLIST.AUXFIELD:=T;
RESUMEAFTERD;END{:1167}ELSE BEGIN CURLIST.AUXFIELD:=T;
MEM[CURLIST.TAILFIELD].HH.RH:=P;IF P<>0 THEN CURLIST.TAILFIELD:=Q;
IF CURLIST.MODEFIELD=1 THEN BUILDPAGE;END{:772};END;{749:}
PROCEDURE ALIGNPEEK;BEGIN ALIGNSTATE:=1000000;{384:}REPEAT GETXTOKEN;
UNTIL CURCMD<>10{:384};IF CURCMD=34 THEN BEGIN SCANLEFTBRAC;
NEWSAVELEVEL(6);END ELSE IF CURCMD=2 THEN FINALIGN ELSE BEGIN INITROW;
INITCOL;END;END;{:749}{:762}{775:}{786:}
FUNCTION FINITESHRINK(P:HALFWORD):HALFWORD;VAR Q:HALFWORD;
BEGIN IF NOSHRINKERRO THEN BEGIN NOSHRINKERRO:=FALSE;PRINTNL(736);
BEGIN HELPPTR:=5;HELPLINE[4]:=737;HELPLINE[3]:=738;HELPLINE[2]:=739;
HELPLINE[1]:=740;HELPLINE[0]:=741;END;ERROR;END;Q:=NEWSPEC(P);
MEM[Q].HH.B1:=0;DELETEGLUERE(P);FINITESHRINK:=Q;END;{:786}{789:}
PROCEDURE TRYBREAK(PI:INTEGER;BREAKTYPE:SMALLNUMBER);LABEL 10,30,22,60;
VAR R:HALFWORD;PREVR:HALFWORD;OLDL:HALFWORD;NOBREAKYET:BOOLEAN;{790:}
PREVPREVR:HALFWORD;S:HALFWORD;Q:HALFWORD;V:HALFWORD;T:QUARTERWORD;
F:INTERNALFONT;L:HALFWORD;NODERSTAYSAC:BOOLEAN;LINEWIDTH:SCALED;
FITCLASS:0..3;B:HALFWORD;D:INTEGER;ARTIFICIALBA:BOOLEAN;
SAVELINK:HALFWORD;{:790}BEGIN{791:}
IF ABS(PI)>=10000 THEN IF PI>0 THEN GOTO 10 ELSE PI:=-10000{:791};
NOBREAKYET:=TRUE;PREVR:=25006;OLDL:=0;CURACTIVEWID[1]:=ACTIVEWIDTH[1];
CURACTIVEWID[2]:=ACTIVEWIDTH[2];CURACTIVEWID[3]:=ACTIVEWIDTH[3];
CURACTIVEWID[4]:=ACTIVEWIDTH[4];CURACTIVEWID[5]:=ACTIVEWIDTH[5];
CURACTIVEWID[6]:=ACTIVEWIDTH[6];
WHILE TRUE DO BEGIN 22:R:=MEM[PREVR].HH.RH;{792:}
IF MEM[R].HH.B0=2 THEN BEGIN CURACTIVEWID[1]:=CURACTIVEWID[1]+MEM[R+1].
INT;CURACTIVEWID[2]:=CURACTIVEWID[2]+MEM[R+2].INT;
CURACTIVEWID[3]:=CURACTIVEWID[3]+MEM[R+3].INT;
CURACTIVEWID[4]:=CURACTIVEWID[4]+MEM[R+4].INT;
CURACTIVEWID[5]:=CURACTIVEWID[5]+MEM[R+5].INT;
CURACTIVEWID[6]:=CURACTIVEWID[6]+MEM[R+6].INT;PREVPREVR:=PREVR;PREVR:=R;
GOTO 22;END{:792};{795:}BEGIN L:=MEM[R+1].HH.LH;
IF L>OLDL THEN BEGIN IF(MINIMUMDEMER<1073741823)AND((OLDL<>EASYLINE)OR(R
=25006))THEN{796:}BEGIN IF NOBREAKYET THEN{797:}BEGIN NOBREAKYET:=FALSE;
BREAKWIDTH[1]:=BACKGROUND[1];BREAKWIDTH[2]:=BACKGROUND[2];
BREAKWIDTH[3]:=BACKGROUND[3];BREAKWIDTH[4]:=BACKGROUND[4];
BREAKWIDTH[5]:=BACKGROUND[5];BREAKWIDTH[6]:=BACKGROUND[6];
IF(BREAKTYPE=0)OR(CURP=0)THEN BEGIN S:=CURP;
WHILE S<>0 DO BEGIN IF(S>25000)THEN GOTO 30;
CASE MEM[S].HH.B0 OF 10:{798:}BEGIN V:=MEM[S+1].HH.LH;
BREAKWIDTH[1]:=BREAKWIDTH[1]-MEM[V+1].INT;
BREAKWIDTH[2+MEM[V].HH.B0]:=BREAKWIDTH[2+MEM[V].HH.B0]-MEM[V+2].INT;
BREAKWIDTH[6]:=BREAKWIDTH[6]-MEM[V+3].INT;END{:798};12:;
9,11:BREAKWIDTH[1]:=BREAKWIDTH[1]-MEM[S+1].INT;OTHERS:GOTO 30 END;
S:=MEM[S].HH.RH;END;END ELSE{800:}BEGIN T:=MEM[CURP].HH.B1;S:=CURP;
WHILE T>0 DO BEGIN T:=T-1;S:=MEM[S].HH.RH;{801:}
IF(S>25000)THEN BEGIN F:=MEM[S].HH.B0;
BREAKWIDTH[1]:=BREAKWIDTH[1]-FONTINFO[WIDTHBASE[F]+FONTINFO[CHARBASE[F]+
MEM[S].HH.B1].QQQQ.B0].INT;
END ELSE CASE MEM[S].HH.B0 OF 6:BEGIN F:=MEM[S+1].HH.B0;
BREAKWIDTH[1]:=BREAKWIDTH[1]-FONTINFO[WIDTHBASE[F]+FONTINFO[CHARBASE[F]+
MEM[S+1].HH.B1].QQQQ.B0].INT;END;
11:BREAKWIDTH[1]:=BREAKWIDTH[1]-MEM[S+1].INT;
OTHERS:CONFUSION(742)END{:801};END;S:=MEM[CURP+1].HH.RH;
WHILE S<>0 DO BEGIN{802:}IF(S>25000)THEN BEGIN F:=MEM[S].HH.B0;
BREAKWIDTH[1]:=BREAKWIDTH[1]+FONTINFO[WIDTHBASE[F]+FONTINFO[CHARBASE[F]+
MEM[S].HH.B1].QQQQ.B0].INT;
END ELSE CASE MEM[S].HH.B0 OF 6:BEGIN F:=MEM[S+1].HH.B0;
BREAKWIDTH[1]:=BREAKWIDTH[1]+FONTINFO[WIDTHBASE[F]+FONTINFO[CHARBASE[F]+
MEM[S+1].HH.B1].QQQQ.B0].INT;END;
11:BREAKWIDTH[1]:=BREAKWIDTH[1]+MEM[S+1].INT;
OTHERS:CONFUSION(743)END{:802};S:=MEM[S].HH.RH;END;
BREAKWIDTH[1]:=BREAKWIDTH[1]+DISCWIDTH;END{:800};30:END{:797};{803:}
IF MEM[PREVR].HH.B0=2 THEN BEGIN MEM[PREVR+1].INT:=MEM[PREVR+1].INT-
CURACTIVEWID[1]+BREAKWIDTH[1];
MEM[PREVR+2].INT:=MEM[PREVR+2].INT-CURACTIVEWID[2]+BREAKWIDTH[2];
MEM[PREVR+3].INT:=MEM[PREVR+3].INT-CURACTIVEWID[3]+BREAKWIDTH[3];
MEM[PREVR+4].INT:=MEM[PREVR+4].INT-CURACTIVEWID[4]+BREAKWIDTH[4];
MEM[PREVR+5].INT:=MEM[PREVR+5].INT-CURACTIVEWID[5]+BREAKWIDTH[5];
MEM[PREVR+6].INT:=MEM[PREVR+6].INT-CURACTIVEWID[6]+BREAKWIDTH[6];
END ELSE IF PREVR=25006 THEN BEGIN ACTIVEWIDTH[1]:=BREAKWIDTH[1];
ACTIVEWIDTH[2]:=BREAKWIDTH[2];ACTIVEWIDTH[3]:=BREAKWIDTH[3];
ACTIVEWIDTH[4]:=BREAKWIDTH[4];ACTIVEWIDTH[5]:=BREAKWIDTH[5];
ACTIVEWIDTH[6]:=BREAKWIDTH[6];END ELSE BEGIN Q:=GETNODE(7);
MEM[Q].HH.RH:=R;MEM[Q].HH.B0:=2;MEM[Q].HH.B1:=0;
MEM[Q+1].INT:=BREAKWIDTH[1]-CURACTIVEWID[1];
MEM[Q+2].INT:=BREAKWIDTH[2]-CURACTIVEWID[2];
MEM[Q+3].INT:=BREAKWIDTH[3]-CURACTIVEWID[3];
MEM[Q+4].INT:=BREAKWIDTH[4]-CURACTIVEWID[4];
MEM[Q+5].INT:=BREAKWIDTH[5]-CURACTIVEWID[5];
MEM[Q+6].INT:=BREAKWIDTH[6]-CURACTIVEWID[6];MEM[PREVR].HH.RH:=Q;
PREVPREVR:=PREVR;PREVR:=Q;END{:803};
MINIMUMDEMER:=MINIMUMDEMER+ABS(EQTB[3866].INT);
FOR FITCLASS:=0 TO 3 DO BEGIN IF MINIMALDEMER[FITCLASS]<=MINIMUMDEMER
THEN{805:}BEGIN Q:=GETNODE(2);MEM[Q].HH.RH:=PASSIVE;PASSIVE:=Q;
MEM[Q+1].HH.RH:=CURP;PASSNUMBER:=PASSNUMBER+1;MEM[Q].HH.LH:=PASSNUMBER;
MEM[Q+1].HH.LH:=BESTPLACE[FITCLASS];Q:=GETNODE(3);
MEM[Q+1].HH.RH:=PASSIVE;MEM[Q+1].HH.LH:=BESTPLLINE[FITCLASS]+1;
MEM[Q].HH.B1:=FITCLASS;MEM[Q].HH.B0:=BREAKTYPE;
MEM[Q+2].INT:=MINIMALDEMER[FITCLASS];MEM[Q].HH.RH:=R;
MEM[PREVR].HH.RH:=Q;PREVR:=Q;IF EQTB[3882].INT>0 THEN{806:}
BEGIN PRINTNL(744);PRINTINT(MEM[PASSIVE].HH.LH);PRINT(745);
PRINTINT(MEM[Q+1].HH.LH-1);PRINTCHAR(46);PRINTINT(FITCLASS);
IF BREAKTYPE=1 THEN PRINTCHAR(45);PRINT(746);PRINTINT(MEM[Q+2].INT);
PRINT(747);PRINTINT(MEM[MEM[PASSIVE+1].HH.LH].HH.LH);END{:806};END{:805}
;MINIMALDEMER[FITCLASS]:=1073741823;END;MINIMUMDEMER:=1073741823;{804:}
IF R<>25006 THEN BEGIN Q:=GETNODE(7);MEM[Q].HH.RH:=R;MEM[Q].HH.B0:=2;
MEM[Q].HH.B1:=0;MEM[Q+1].INT:=CURACTIVEWID[1]-BREAKWIDTH[1];
MEM[Q+2].INT:=CURACTIVEWID[2]-BREAKWIDTH[2];
MEM[Q+3].INT:=CURACTIVEWID[3]-BREAKWIDTH[3];
MEM[Q+4].INT:=CURACTIVEWID[4]-BREAKWIDTH[4];
MEM[Q+5].INT:=CURACTIVEWID[5]-BREAKWIDTH[5];
MEM[Q+6].INT:=CURACTIVEWID[6]-BREAKWIDTH[6];MEM[PREVR].HH.RH:=Q;
PREVPREVR:=PREVR;PREVR:=Q;END{:804};END{:796};IF R=25006 THEN GOTO 10;
{810:}IF L>EASYLINE THEN BEGIN LINEWIDTH:=SECONDWIDTH;OLDL:=262142;
END ELSE BEGIN OLDL:=L;
IF L>LASTSPECIALL THEN LINEWIDTH:=SECONDWIDTH ELSE IF EQTB[2898].HH.RH=0
THEN LINEWIDTH:=FIRSTWIDTH ELSE LINEWIDTH:=MEM[EQTB[2898].HH.RH+2*L].INT
;END{:810};END;END{:795};{811:}BEGIN ARTIFICIALBA:=FALSE;
IF CURACTIVEWID[1]<LINEWIDTH THEN{812:}
IF(CURACTIVEWID[3]<>0)OR(CURACTIVEWID[4]<>0)OR(CURACTIVEWID[5]<>0)THEN
BEGIN B:=0;FITCLASS:=2;
END ELSE BEGIN B:=BADNESS(LINEWIDTH-CURACTIVEWID[1],CURACTIVEWID[2]);
IF B>12 THEN IF B>99 THEN FITCLASS:=0 ELSE FITCLASS:=1 ELSE FITCLASS:=2;
END{:812}ELSE{813:}
BEGIN IF CURACTIVEWID[1]-LINEWIDTH>CURACTIVEWID[6]THEN B:=10001 ELSE B:=
BADNESS(CURACTIVEWID[1]-LINEWIDTH,CURACTIVEWID[6]);
IF B>12 THEN FITCLASS:=3 ELSE FITCLASS:=2;END{:813};
IF(B>10000)OR(PI=-10000)THEN{814:}
BEGIN IF SECONDPASS AND(MINIMUMDEMER=1073741823)AND(MEM[R].HH.RH=25006)
AND(PREVR=25006)THEN BEGIN B:=0;ARTIFICIALBA:=TRUE;
END ELSE IF B>THRESHOLD THEN GOTO 60;NODERSTAYSAC:=FALSE;END{:814}
ELSE BEGIN PREVR:=R;IF B>THRESHOLD THEN GOTO 22;NODERSTAYSAC:=TRUE;END;
{815:}{819:}D:=EQTB[3852].INT+B;D:=D*D;
IF PI<>0 THEN IF PI>0 THEN D:=D+PI*PI ELSE IF PI>-10000 THEN D:=D-PI*PI;
IF(BREAKTYPE=1)AND(MEM[R].HH.B0=1)THEN IF CURP<>0 THEN D:=D+EQTB[3864].
INT ELSE D:=D+EQTB[3865].INT;
IF ABS(FITCLASS-MEM[R].HH.B1)>1 THEN D:=D+EQTB[3866].INT{:819};
IF EQTB[3882].INT>0 THEN{816:}BEGIN IF PRINTHEAD<>CURP THEN{817:}
BEGIN SAVELINK:=MEM[CURP].HH.RH;MEM[CURP].HH.RH:=0;PRINTNL(228);
SHORTDISPLAY(MEM[PRINTHEAD].HH.RH);MEM[CURP].HH.RH:=SAVELINK;
PRINTHEAD:=CURP;END{:817};PRINTNL(64);
IF CURP=0 THEN PRINTESC(417)ELSE IF MEM[CURP].HH.B0<>10 THEN BEGIN IF
MEM[CURP].HH.B0=12 THEN PRINTESC(353)ELSE IF MEM[CURP].HH.B0=7 THEN
PRINTESC(215)ELSE IF MEM[CURP].HH.B0=11 THEN PRINTESC(207)ELSE PRINTESC(
209);END;PRINT(748);
IF MEM[R+1].HH.RH=0 THEN PRINTCHAR(48)ELSE PRINTINT(MEM[MEM[R+1].HH.RH].
HH.LH);PRINT(749);IF ARTIFICIALBA THEN PRINTCHAR(42)ELSE PRINTINT(B);
PRINT(750);PRINTINT(PI);PRINT(751);PRINTINT(D);END{:816};
D:=D+MEM[R+2].INT;
IF D<=MINIMALDEMER[FITCLASS]THEN BEGIN MINIMALDEMER[FITCLASS]:=D;
BESTPLACE[FITCLASS]:=MEM[R+1].HH.RH;BESTPLLINE[FITCLASS]:=L;
IF D<MINIMUMDEMER THEN MINIMUMDEMER:=D;END{:815};
IF NODERSTAYSAC THEN GOTO 22;60:{820:}MEM[PREVR].HH.RH:=MEM[R].HH.RH;
FREENODE(R,3);IF PREVR=25006 THEN{821:}BEGIN R:=MEM[25006].HH.RH;
IF MEM[R].HH.B0=2 THEN BEGIN ACTIVEWIDTH[1]:=ACTIVEWIDTH[1]+MEM[R+1].INT
;ACTIVEWIDTH[2]:=ACTIVEWIDTH[2]+MEM[R+2].INT;
ACTIVEWIDTH[3]:=ACTIVEWIDTH[3]+MEM[R+3].INT;
ACTIVEWIDTH[4]:=ACTIVEWIDTH[4]+MEM[R+4].INT;
ACTIVEWIDTH[5]:=ACTIVEWIDTH[5]+MEM[R+5].INT;
ACTIVEWIDTH[6]:=ACTIVEWIDTH[6]+MEM[R+6].INT;
CURACTIVEWID[1]:=ACTIVEWIDTH[1];CURACTIVEWID[2]:=ACTIVEWIDTH[2];
CURACTIVEWID[3]:=ACTIVEWIDTH[3];CURACTIVEWID[4]:=ACTIVEWIDTH[4];
CURACTIVEWID[5]:=ACTIVEWIDTH[5];CURACTIVEWID[6]:=ACTIVEWIDTH[6];
MEM[25006].HH.RH:=MEM[R].HH.RH;FREENODE(R,7);END;END{:821}
ELSE IF MEM[PREVR].HH.B0=2 THEN BEGIN R:=MEM[PREVR].HH.RH;
IF R=25006 THEN BEGIN CURACTIVEWID[1]:=CURACTIVEWID[1]-MEM[PREVR+1].INT;
CURACTIVEWID[2]:=CURACTIVEWID[2]-MEM[PREVR+2].INT;
CURACTIVEWID[3]:=CURACTIVEWID[3]-MEM[PREVR+3].INT;
CURACTIVEWID[4]:=CURACTIVEWID[4]-MEM[PREVR+4].INT;
CURACTIVEWID[5]:=CURACTIVEWID[5]-MEM[PREVR+5].INT;
CURACTIVEWID[6]:=CURACTIVEWID[6]-MEM[PREVR+6].INT;
MEM[PREVPREVR].HH.RH:=25006;FREENODE(PREVR,7);PREVR:=PREVPREVR;
END ELSE IF MEM[R].HH.B0=2 THEN BEGIN CURACTIVEWID[1]:=CURACTIVEWID[1]+
MEM[R+1].INT;CURACTIVEWID[2]:=CURACTIVEWID[2]+MEM[R+2].INT;
CURACTIVEWID[3]:=CURACTIVEWID[3]+MEM[R+3].INT;
CURACTIVEWID[4]:=CURACTIVEWID[4]+MEM[R+4].INT;
CURACTIVEWID[5]:=CURACTIVEWID[5]+MEM[R+5].INT;
CURACTIVEWID[6]:=CURACTIVEWID[6]+MEM[R+6].INT;
MEM[PREVR+1].INT:=MEM[PREVR+1].INT+MEM[R+1].INT;
MEM[PREVR+2].INT:=MEM[PREVR+2].INT+MEM[R+2].INT;
MEM[PREVR+3].INT:=MEM[PREVR+3].INT+MEM[R+3].INT;
MEM[PREVR+4].INT:=MEM[PREVR+4].INT+MEM[R+4].INT;
MEM[PREVR+5].INT:=MEM[PREVR+5].INT+MEM[R+5].INT;
MEM[PREVR+6].INT:=MEM[PREVR+6].INT+MEM[R+6].INT;
MEM[PREVR].HH.RH:=MEM[R].HH.RH;FREENODE(R,7);END;END{:820};END{:811};
END;10:{818:}
IF CURP=PRINTHEAD THEN IF CURP<>0 THEN IF MEM[CURP].HH.B0=7 THEN BEGIN T
:=MEM[CURP].HH.B1;WHILE T>0 DO BEGIN T:=T-1;
PRINTHEAD:=MEM[PRINTHEAD].HH.RH;END;END{:818}END;{:789}{837:}
PROCEDURE POSTLINEBREA(FINALWIDOWPE:INTEGER);LABEL 30,31;
VAR Q,R,S:HALFWORD;DISCBREAK:BOOLEAN;CURWIDTH:SCALED;CURINDENT:SCALED;
T:QUARTERWORD;PEN:INTEGER;CURLINE:HALFWORD;BEGIN{838:}
Q:=MEM[BESTBET+1].HH.RH;CURP:=0;REPEAT R:=Q;Q:=MEM[Q+1].HH.LH;
MEM[R+1].HH.LH:=CURP;CURP:=R;UNTIL Q=0{:838};CURLINE:=CURLIST.PGFIELD+1;
REPEAT{840:}{841:}Q:=MEM[CURP+1].HH.RH;DISCBREAK:=FALSE;
IF Q<>0 THEN IF MEM[Q].HH.B0=10 THEN BEGIN DELETEGLUERE(MEM[Q+1].HH.LH);
MEM[Q+1].HH.LH:=EQTB[2376].HH.RH;MEM[Q].HH.B1:=8;
MEM[EQTB[2376].HH.RH].HH.RH:=MEM[EQTB[2376].HH.RH].HH.RH+1;GOTO 30;
END ELSE BEGIN IF MEM[Q].HH.B0=7 THEN{842:}BEGIN T:=MEM[Q].HH.B1;{843:}
IF T=0 THEN R:=MEM[Q].HH.RH ELSE BEGIN R:=Q;
WHILE T>1 DO BEGIN R:=MEM[R].HH.RH;T:=T-1;END;S:=MEM[R].HH.RH;
IF NOT(S>25000)THEN IF MEM[CURP+1].HH.LH<>0 THEN IF MEM[MEM[CURP+1].HH.
LH+1].HH.RH=S THEN S:=R;R:=MEM[S].HH.RH;MEM[S].HH.RH:=0;
FLUSHNODELIS(MEM[Q].HH.RH);MEM[Q].HH.B1:=0;END{:843};
IF MEM[Q+1].HH.RH<>0 THEN{844:}BEGIN S:=MEM[Q+1].HH.RH;
WHILE MEM[S].HH.RH<>0 DO S:=MEM[S].HH.RH;MEM[S].HH.RH:=R;
R:=MEM[Q+1].HH.RH;MEM[Q+1].HH.RH:=0;END{:844};
IF MEM[Q+1].HH.LH<>0 THEN{845:}BEGIN S:=MEM[Q+1].HH.LH;MEM[Q].HH.RH:=S;
WHILE MEM[S].HH.RH<>0 DO S:=MEM[S].HH.RH;MEM[Q+1].HH.LH:=0;Q:=S;
END{:845};MEM[Q].HH.RH:=R;DISCBREAK:=TRUE;END{:842};
IF(MEM[Q].HH.B0=9)OR(MEM[Q].HH.B0=11)THEN MEM[Q+1].INT:=0;
END ELSE BEGIN Q:=25003;WHILE MEM[Q].HH.RH<>0 DO Q:=MEM[Q].HH.RH;END;
{846:}R:=NEWPARAMGLUE(7);MEM[R].HH.RH:=MEM[Q].HH.RH;MEM[Q].HH.RH:=R;
Q:=R{:846};30:{:841};{847:}R:=MEM[Q].HH.RH;MEM[Q].HH.RH:=0;
Q:=MEM[25003].HH.RH;MEM[25003].HH.RH:=R;
IF EQTB[2375].HH.RH<>0 THEN BEGIN R:=NEWPARAMGLUE(6);MEM[R].HH.RH:=Q;
Q:=R;END{:847};{848:}
IF CURLINE>LASTSPECIALL THEN BEGIN CURWIDTH:=SECONDWIDTH;
CURINDENT:=SECONDINDENT;
END ELSE IF EQTB[2898].HH.RH=0 THEN BEGIN CURWIDTH:=FIRSTWIDTH;
CURINDENT:=FIRSTINDENT;
END ELSE BEGIN CURWIDTH:=MEM[EQTB[2898].HH.RH+2*CURLINE].INT;
CURINDENT:=MEM[EQTB[2898].HH.RH+2*CURLINE-1].INT;END;
JUSTBOX:=HPACK(Q,CURWIDTH,0);MEM[JUSTBOX+4].INT:=CURINDENT{:848};{849:}
APPENDTOVLIS(JUSTBOX);
IF MEM[25005].HH.RH<>0 THEN BEGIN MEM[CURLIST.TAILFIELD].HH.RH:=MEM[
25005].HH.RH;REPEAT CURLIST.TAILFIELD:=MEM[CURLIST.TAILFIELD].HH.RH;
UNTIL MEM[CURLIST.TAILFIELD].HH.RH=0;END{:849};{850:}
IF CURLINE+1<>BESTLINE THEN BEGIN PEN:=EQTB[3863].INT;
IF CURLINE=CURLIST.PGFIELD+1 THEN PEN:=PEN+EQTB[3855].INT;
IF CURLINE+2=BESTLINE THEN PEN:=PEN+FINALWIDOWPE;
IF DISCBREAK THEN PEN:=PEN+EQTB[3858].INT;
IF PEN<>0 THEN BEGIN R:=NEWPENALTY(PEN);MEM[CURLIST.TAILFIELD].HH.RH:=R;
CURLIST.TAILFIELD:=R;END;END{:850}{:840};CURLINE:=CURLINE+1;
CURP:=MEM[CURP+1].HH.LH;IF CURP<>0 THEN{839:}BEGIN R:=25003;
WHILE TRUE DO BEGIN Q:=MEM[R].HH.RH;IF Q=MEM[CURP+1].HH.RH THEN GOTO 31;
IF(Q>25000)THEN GOTO 31;IF(MEM[Q].HH.B0<9)THEN GOTO 31;R:=Q;END;
31:IF R<>25003 THEN BEGIN MEM[R].HH.RH:=0;
FLUSHNODELIS(MEM[25003].HH.RH);MEM[25003].HH.RH:=Q;END;END{:839};
UNTIL CURP=0;
IF(CURLINE<>BESTLINE)OR(MEM[25003].HH.RH<>0)THEN CONFUSION(756);
CURLIST.PGFIELD:=BESTLINE-1;END;{:837}{855:}{866:}
FUNCTION RECONSTITUTE(J,N:SMALLNUMBER):SMALLNUMBER;LABEL 22,30;
VAR P:HALFWORD;S:HALFWORD;Q:FOURQUARTERS;C:QUARTERWORD;D:QUARTERWORD;
W:SCALED;R:0..FONTMEMSIZE;BEGIN{867:}HYPHENPASSED:=0;S:=25004;W:=0;
D:=HU[J];C:=D;WHILE TRUE DO BEGIN 22:P:=GETAVAIL;MEM[P].HH.B0:=HF;
MEM[P].HH.B1:=C;MEM[S].HH.RH:=P;{868:}IF J=N THEN GOTO 30;
Q:=FONTINFO[CHARBASE[HF]+D].QQQQ;IF(Q.B2 MOD 4)<>1 THEN GOTO 30;
R:=LIGKERNBASE[HF]+Q.B3;C:=HU[J+1];
WHILE TRUE DO BEGIN Q:=FONTINFO[R].QQQQ;
IF Q.B1=C THEN BEGIN IF ODD(HYF[J])AND(HYPHENPASSED=0)THEN HYPHENPASSED
:=J;IF Q.B2<128 THEN{869:}BEGIN D:=Q.B3;J:=J+1;S:=P;GOTO 22;END{:869}
ELSE BEGIN W:=FONTINFO[KERNBASE[HF]+Q.B3].INT;GOTO 30;END;
END ELSE IF Q.B0<128 THEN R:=R+1 ELSE GOTO 30;END{:868};END;30:{:867};
{870:}IF S<>25004 THEN BEGIN P:=NEWLIGATURE(HF,D,MEM[25004].HH.RH);
MEM[25004].HH.RH:=P;END{:870};{871:}
IF W<>0 THEN MEM[MEM[25004].HH.RH].HH.RH:=NEWKERN(W){:871};
RECONSTITUTE:=J;END;{:866}PROCEDURE HYPHENATE;LABEL 30,40,45,41,10;
VAR{861:}I,J,L:SMALLNUMBER;Q,R,S:HALFWORD;{:861}{872:}
MAJORTAIL,MINORTAIL:HALFWORD;C:ASCIICODE;{:872}{882:}Z:TRIEPOINTER;
V:QUARTERWORD;{:882}{889:}H:HYPHPOINTER;K:STRNUMBER;U:POOLPOINTER;{:889}
BEGIN{883:}FOR J:=0 TO HN DO HYF[J]:=0;{890:}H:=HC[1];
FOR J:=2 TO HN DO H:=(H+H+HC[J])MOD 307;WHILE TRUE DO BEGIN{891:}
K:=HYPHWORD[H];IF K=0 THEN GOTO 45;
IF(STRSTART[K+1]-STRSTART[K])<HN THEN GOTO 45;
IF(STRSTART[K+1]-STRSTART[K])=HN THEN BEGIN J:=1;U:=STRSTART[K];
REPEAT IF STRPOOL[U]<HC[J]THEN GOTO 45;IF STRPOOL[U]>HC[J]THEN GOTO 30;
J:=J+1;U:=U+1;UNTIL J>HN;{892:}S:=HYPHLIST[H];
WHILE S<>0 DO BEGIN HYF[MEM[S].HH.LH]:=1;S:=MEM[S].HH.RH;END{:892};
GOTO 40;END;30:{:891};IF H>0 THEN H:=H-1 ELSE H:=307;END;45:{:890};
HC[0]:=127;HC[HN+1]:=127;HC[HN+2]:=256;
FOR J:=0 TO HN-2 DO BEGIN Z:=HC[J];L:=J;
WHILE HC[L]=TRIE[Z].B1 DO BEGIN IF TRIE[Z].B0<>0 THEN{884:}
BEGIN V:=TRIE[Z].B0;REPEAT I:=L-HYFDISTANCE[V];
IF HYFNUM[V]>HYF[I]THEN HYF[I]:=HYFNUM[V];V:=HYFNEXT[V];UNTIL V=0;
END{:884};L:=L+1;Z:=TRIE[Z].RH+HC[L];END;END;40:HYF[1]:=0;HYF[HN-2]:=0;
HYF[HN-1]:=0;HYF[HN]:=0{:883};{862:}
FOR J:=2 TO HN-3 DO IF ODD(HYF[J])THEN GOTO 41;GOTO 10;41:{:862};{863:}
Q:=MEM[HB].HH.RH;MEM[HB].HH.RH:=0;S:=CURP;
WHILE MEM[S].HH.RH<>HA DO S:=MEM[S].HH.RH;MEM[S].HH.RH:=0;
FLUSHNODELIS(HA);{873:}J:=0;REPEAT L:=J;J:=RECONSTITUTE(J+1,HN);
IF HYPHENPASSED<>0 THEN{874:}BEGIN R:=GETNODE(2);MEM[S].HH.RH:=R;
MEM[R].HH.RH:=MEM[25004].HH.RH;MEM[R].HH.B0:=7;
MAJORTAIL:=MEM[25004].HH.RH;
IF MEM[MAJORTAIL].HH.RH<>0 THEN MAJORTAIL:=MEM[MAJORTAIL].HH.RH;
I:=HYPHENPASSED;{875:}MINORTAIL:=0;C:=HU[I+1];HU[I+1]:=45;
REPEAT L:=RECONSTITUTE(L+1,I+1);
IF MINORTAIL=0 THEN MEM[R+1].HH.LH:=MEM[25004].HH.RH ELSE MEM[MINORTAIL]
.HH.RH:=MEM[25004].HH.RH;MINORTAIL:=MEM[25004].HH.RH;
IF MEM[MINORTAIL].HH.RH<>0 THEN MINORTAIL:=MEM[MINORTAIL].HH.RH;
UNTIL L>I;HU[I+1]:=C;L:=L-1;HYF[L]:=0{:875};{876:}MINORTAIL:=0;
MEM[R+1].HH.RH:=0;WHILE L<J DO BEGIN REPEAT L:=RECONSTITUTE(L+1,HN);
IF MINORTAIL=0 THEN MEM[R+1].HH.RH:=MEM[25004].HH.RH ELSE MEM[MINORTAIL]
.HH.RH:=MEM[25004].HH.RH;MINORTAIL:=MEM[25004].HH.RH;
IF MEM[MINORTAIL].HH.RH<>0 THEN BEGIN HYF[L]:=0;
MINORTAIL:=MEM[MINORTAIL].HH.RH;END;UNTIL L>=J;
WHILE L>J DO BEGIN J:=RECONSTITUTE(J+1,HN);
MEM[MAJORTAIL].HH.RH:=MEM[25004].HH.RH;MAJORTAIL:=MEM[25004].HH.RH;
IF MEM[MAJORTAIL].HH.RH<>0 THEN BEGIN HYF[J]:=0;
MAJORTAIL:=MEM[MAJORTAIL].HH.RH;END;END;END{:876};{877:}I:=0;S:=R;
WHILE MEM[S].HH.RH<>0 DO BEGIN I:=I+1;S:=MEM[S].HH.RH;END;
MEM[R].HH.B1:=I{:877};END{:874}
ELSE BEGIN MEM[S].HH.RH:=MEM[25004].HH.RH;S:=MEM[S].HH.RH;
IF MEM[S].HH.RH<>0 THEN S:=MEM[S].HH.RH;END;IF ODD(HYF[J])THEN{878:}
BEGIN R:=NEWDISC;MEM[R+1].HH.LH:=NEWCHARACTER(HF,45);MEM[S].HH.RH:=R;
S:=R;END{:878};UNTIL J=HN;MEM[S].HH.RH:=Q{:873}{:863};10:END;{:855}
PROCEDURE LINEBREAK(FINALWIDOWPE:INTEGER);LABEL 30,31,32,33,34;VAR{822:}
AUTOBREAKING:BOOLEAN;PREVP:HALFWORD;Q,R,S:HALFWORD;F:INTERNALFONT;{:822}
{853:}J:SMALLNUMBER;C:0..255;{:853}BEGIN PARBEGINLINE:=CURLIST.MLFIELD;
{776:}MEM[25003].HH.RH:=MEM[CURLIST.HEADFIELD].HH.RH;
IF(CURLIST.TAILFIELD>25000)THEN BEGIN MEM[CURLIST.TAILFIELD].HH.RH:=
NEWPENALTY(10000);CURLIST.TAILFIELD:=MEM[CURLIST.TAILFIELD].HH.RH;
END ELSE IF MEM[CURLIST.TAILFIELD].HH.B0<>10 THEN BEGIN MEM[CURLIST.
TAILFIELD].HH.RH:=NEWPENALTY(10000);
CURLIST.TAILFIELD:=MEM[CURLIST.TAILFIELD].HH.RH;
END ELSE BEGIN MEM[CURLIST.TAILFIELD].HH.B0:=12;
DELETEGLUERE(MEM[CURLIST.TAILFIELD+1].HH.LH);
FLUSHNODELIS(MEM[CURLIST.TAILFIELD+1].HH.RH);
MEM[CURLIST.TAILFIELD+1].INT:=10000;END;
MEM[CURLIST.TAILFIELD].HH.RH:=NEWPARAMGLUE(13);POPNEST;{:776}{787:}
NOSHRINKERRO:=TRUE;
IF(MEM[EQTB[2375].HH.RH].HH.B1<>0)AND(MEM[EQTB[2375].HH.RH+3].INT<>0)
THEN BEGIN EQTB[2375].HH.RH:=FINITESHRINK(EQTB[2375].HH.RH);END;
IF(MEM[EQTB[2376].HH.RH].HH.B1<>0)AND(MEM[EQTB[2376].HH.RH+3].INT<>0)
THEN BEGIN EQTB[2376].HH.RH:=FINITESHRINK(EQTB[2376].HH.RH);END;
Q:=EQTB[2375].HH.RH;R:=EQTB[2376].HH.RH;
BACKGROUND[1]:=MEM[Q+1].INT+MEM[R+1].INT;BACKGROUND[2]:=0;
BACKGROUND[3]:=0;BACKGROUND[4]:=0;BACKGROUND[5]:=0;
BACKGROUND[2+MEM[Q].HH.B0]:=MEM[Q+2].INT;
BACKGROUND[2+MEM[R].HH.B0]:=BACKGROUND[2+MEM[R].HH.B0]+MEM[R+2].INT;
BACKGROUND[6]:=MEM[Q+3].INT+MEM[R+3].INT;{:787}{794:}
MINIMUMDEMER:=1073741823;MINIMALDEMER[3]:=1073741823;
MINIMALDEMER[2]:=1073741823;MINIMALDEMER[1]:=1073741823;
MINIMALDEMER[0]:=1073741823;{:794}{808:}
IF EQTB[2898].HH.RH=0 THEN IF EQTB[4295].INT=0 THEN BEGIN LASTSPECIALL:=
0;SECONDWIDTH:=EQTB[4281].INT;SECONDINDENT:=0;END ELSE{809:}
BEGIN LASTSPECIALL:=ABS(EQTB[3890].INT);
IF EQTB[3890].INT<0 THEN BEGIN FIRSTWIDTH:=EQTB[4281].INT-ABS(EQTB[4295]
.INT);
IF EQTB[4295].INT>=0 THEN FIRSTINDENT:=EQTB[4295].INT ELSE FIRSTINDENT:=
0;SECONDWIDTH:=EQTB[4281].INT;SECONDINDENT:=0;
END ELSE BEGIN FIRSTWIDTH:=EQTB[4281].INT;FIRSTINDENT:=0;
SECONDWIDTH:=EQTB[4281].INT-ABS(EQTB[4295].INT);
IF EQTB[4295].INT>=0 THEN SECONDINDENT:=EQTB[4295].INT ELSE SECONDINDENT
:=0;END;END{:809}ELSE BEGIN LASTSPECIALL:=MEM[EQTB[2898].HH.RH].HH.LH-1;
SECONDWIDTH:=MEM[EQTB[2898].HH.RH+2*(LASTSPECIALL+1)].INT;
SECONDINDENT:=MEM[EQTB[2898].HH.RH+2*LASTSPECIALL+1].INT;END;
IF EQTB[3869].INT=0 THEN EASYLINE:=LASTSPECIALL ELSE EASYLINE:=262143{:
808};{823:}THRESHOLD:=EQTB[3850].INT;
IF THRESHOLD>=0 THEN BEGIN IF EQTB[3882].INT>0 THEN BEGIN BEGINDIAGNOS;
PRINTNL(752);END;SECONDPASS:=FALSE;
END ELSE BEGIN THRESHOLD:=EQTB[3851].INT;SECONDPASS:=TRUE;
IF EQTB[3882].INT>0 THEN BEGINDIAGNOS;END;WHILE TRUE DO BEGIN{824:}
Q:=GETNODE(3);MEM[Q].HH.B0:=0;MEM[Q].HH.B1:=2;MEM[Q].HH.RH:=25006;
MEM[Q+1].HH.RH:=0;MEM[Q+1].HH.LH:=CURLIST.PGFIELD+1;MEM[Q+2].INT:=0;
MEM[25006].HH.RH:=Q;ACTIVEWIDTH[1]:=BACKGROUND[1];
ACTIVEWIDTH[2]:=BACKGROUND[2];ACTIVEWIDTH[3]:=BACKGROUND[3];
ACTIVEWIDTH[4]:=BACKGROUND[4];ACTIVEWIDTH[5]:=BACKGROUND[5];
ACTIVEWIDTH[6]:=BACKGROUND[6];PASSIVE:=0;PRINTHEAD:=25003;PASSNUMBER:=0;
FONTINSHORTD:=0{:824};CURP:=MEM[25003].HH.RH;AUTOBREAKING:=TRUE;
PREVP:=CURP;WHILE(CURP<>0)AND(MEM[25006].HH.RH<>25006)DO{826:}
BEGIN IF(CURP>25000)THEN{827:}BEGIN PREVP:=CURP;
REPEAT F:=MEM[CURP].HH.B0;
ACTIVEWIDTH[1]:=ACTIVEWIDTH[1]+FONTINFO[WIDTHBASE[F]+FONTINFO[CHARBASE[F
]+MEM[CURP].HH.B1].QQQQ.B0].INT;CURP:=MEM[CURP].HH.RH;
UNTIL NOT(CURP>25000);END{:827};
CASE MEM[CURP].HH.B0 OF 0,1,2:ACTIVEWIDTH[1]:=ACTIVEWIDTH[1]+MEM[CURP+1]
.INT;8:{1313:}{:1313};10:BEGIN{828:}
IF AUTOBREAKING THEN BEGIN IF(PREVP>25000)THEN TRYBREAK(0,0)ELSE IF(MEM[
PREVP].HH.B0<9)THEN TRYBREAK(0,0);END{:828};{829:}
BEGIN IF(MEM[MEM[CURP+1].HH.LH].HH.B1<>0)AND(MEM[MEM[CURP+1].HH.LH+3].
INT<>0)THEN BEGIN MEM[CURP+1].HH.LH:=FINITESHRINK(MEM[CURP+1].HH.LH);
END;Q:=MEM[CURP+1].HH.LH;ACTIVEWIDTH[1]:=ACTIVEWIDTH[1]+MEM[Q+1].INT;
ACTIVEWIDTH[2+MEM[Q].HH.B0]:=ACTIVEWIDTH[2+MEM[Q].HH.B0]+MEM[Q+2].INT;
ACTIVEWIDTH[6]:=ACTIVEWIDTH[6]+MEM[Q+3].INT;END{:829};
IF SECONDPASS AND AUTOBREAKING THEN{854:}BEGIN S:=MEM[CURP].HH.RH;
IF S<>0 THEN BEGIN{856:}
WHILE TRUE DO BEGIN IF(S>25000)THEN BEGIN C:=MEM[S].HH.B1;
HF:=MEM[S].HH.B0;
END ELSE IF MEM[S].HH.B0=6 THEN BEGIN Q:=MEM[S+1].HH.RH;C:=MEM[Q].HH.B1;
HF:=MEM[Q].HH.B0;
END ELSE IF(MEM[S].HH.B0<>11)OR(MEM[S].HH.B1<>0)THEN GOTO 31 ELSE C:=128
;IF C<128 THEN IF EQTB[3466+C].HH.RH<>0 THEN IF(EQTB[3466+C].HH.RH=C)OR(
EQTB[3887].INT<>0)THEN GOTO 32 ELSE GOTO 31;S:=MEM[S].HH.RH;END;
32:HA:=S{:856};{857:}HN:=0;
WHILE TRUE DO BEGIN IF(S>25000)THEN BEGIN IF MEM[S].HH.B0<>HF THEN GOTO
33;C:=MEM[S].HH.B1;IF C>=128 THEN GOTO 33;
IF(EQTB[3466+C].HH.RH=0)OR(HN=63)THEN GOTO 33;HB:=S;HN:=HN+1;HU[HN]:=C;
HC[HN]:=EQTB[3466+C].HH.RH;END ELSE IF MEM[S].HH.B0=6 THEN{858:}
BEGIN J:=HN;Q:=MEM[S+1].HH.RH;IF MEM[Q].HH.B0<>HF THEN GOTO 33;
REPEAT C:=MEM[Q].HH.B1;IF C>=128 THEN GOTO 33;
IF(EQTB[3466+C].HH.RH=0)OR(J=63)THEN GOTO 33;J:=J+1;HU[J]:=C;
HC[J]:=EQTB[3466+C].HH.RH;Q:=MEM[Q].HH.RH;UNTIL Q=0;HB:=S;HN:=J;
END{:858}ELSE IF(MEM[S].HH.B0<>11)OR(MEM[S].HH.B1<>0)THEN GOTO 33;
S:=MEM[S].HH.RH;END;33:{:857};{859:}IF HN<5 THEN GOTO 31;
WHILE TRUE DO BEGIN IF NOT((S>25000))THEN CASE MEM[S].HH.B0 OF 6:;
11:IF MEM[S].HH.B1<>0 THEN GOTO 34;10,12,3,5,4:GOTO 34;
OTHERS:GOTO 31 END;S:=MEM[S].HH.RH;END;34:{:859};HYPHENATE;END;
31:END{:854};END;
11:BEGIN IF NOT(MEM[CURP].HH.RH>25000)AND AUTOBREAKING THEN IF MEM[MEM[
CURP].HH.RH].HH.B0=10 THEN TRYBREAK(0,0);
ACTIVEWIDTH[1]:=ACTIVEWIDTH[1]+MEM[CURP+1].INT;END;
6:BEGIN F:=MEM[CURP+1].HH.B0;
ACTIVEWIDTH[1]:=ACTIVEWIDTH[1]+FONTINFO[WIDTHBASE[F]+FONTINFO[CHARBASE[F
]+MEM[CURP+1].HH.B1].QQQQ.B0].INT;END;7:{830:}
BEGIN S:=MEM[CURP+1].HH.LH;
IF S=0 THEN TRYBREAK(EQTB[3854].INT,1)ELSE BEGIN DISCWIDTH:=0;
REPEAT{831:}IF(S>25000)THEN BEGIN F:=MEM[S].HH.B0;
DISCWIDTH:=DISCWIDTH+FONTINFO[WIDTHBASE[F]+FONTINFO[CHARBASE[F]+MEM[S].
HH.B1].QQQQ.B0].INT;
END ELSE CASE MEM[S].HH.B0 OF 6:BEGIN F:=MEM[S+1].HH.B0;
DISCWIDTH:=DISCWIDTH+FONTINFO[WIDTHBASE[F]+FONTINFO[CHARBASE[F]+MEM[S+1]
.HH.B1].QQQQ.B0].INT;END;11:DISCWIDTH:=DISCWIDTH+MEM[S+1].INT;
OTHERS:CONFUSION(755)END{:831};S:=MEM[S].HH.RH;UNTIL S=0;
ACTIVEWIDTH[1]:=ACTIVEWIDTH[1]+DISCWIDTH;TRYBREAK(EQTB[3853].INT,1);
ACTIVEWIDTH[1]:=ACTIVEWIDTH[1]-DISCWIDTH;END;END{:830};
9:BEGIN AUTOBREAKING:=(MEM[CURP].HH.B1=1);
BEGIN IF NOT(MEM[CURP].HH.RH>25000)AND AUTOBREAKING THEN IF MEM[MEM[CURP
].HH.RH].HH.B0=10 THEN TRYBREAK(0,0);
ACTIVEWIDTH[1]:=ACTIVEWIDTH[1]+MEM[CURP+1].INT;END;END;
12:TRYBREAK(MEM[CURP+1].INT,0);4,3,5:;OTHERS:CONFUSION(754)END;
PREVP:=CURP;CURP:=MEM[CURP].HH.RH;END{:826};IF CURP=0 THEN{833:}
BEGIN TRYBREAK(-10000,1);IF MEM[25006].HH.RH<>25006 THEN BEGIN{834:}
R:=MEM[25006].HH.RH;FEWESTDEMERI:=1073741823;
REPEAT IF MEM[R].HH.B0<>2 THEN IF MEM[R+2].INT<FEWESTDEMERI THEN BEGIN
FEWESTDEMERI:=MEM[R+2].INT;BESTBET:=R;END;R:=MEM[R].HH.RH;UNTIL R=25006;
BESTLINE:=MEM[BESTBET+1].HH.LH{:834};IF EQTB[3869].INT=0 THEN GOTO 30;
{835:}BEGIN R:=MEM[25006].HH.RH;ACTUALLOOSEN:=0;
REPEAT IF MEM[R].HH.B0<>2 THEN BEGIN LINEDIFF:=MEM[R+1].HH.LH-BESTLINE;
IF((LINEDIFF<ACTUALLOOSEN)AND(EQTB[3869].INT<=LINEDIFF))OR((LINEDIFF>
ACTUALLOOSEN)AND(EQTB[3869].INT>=LINEDIFF))THEN BEGIN BESTBET:=R;
ACTUALLOOSEN:=LINEDIFF;FEWESTDEMERI:=MEM[R+2].INT;
END ELSE IF(LINEDIFF=ACTUALLOOSEN)AND(MEM[R+2].INT<FEWESTDEMERI)THEN
BEGIN BESTBET:=R;FEWESTDEMERI:=MEM[R+2].INT;END;END;R:=MEM[R].HH.RH;
UNTIL R=25006;BESTLINE:=MEM[BESTBET+1].HH.LH;END{:835};
IF(ACTUALLOOSEN=EQTB[3869].INT)OR SECONDPASS THEN GOTO 30;END;END{:833};
{825:}Q:=MEM[25006].HH.RH;WHILE Q<>25006 DO BEGIN CURP:=MEM[Q].HH.RH;
IF MEM[Q].HH.B0=2 THEN FREENODE(Q,7)ELSE FREENODE(Q,3);Q:=CURP;END;
Q:=PASSIVE;WHILE Q<>0 DO BEGIN CURP:=MEM[Q].HH.RH;FREENODE(Q,2);Q:=CURP;
END{:825};IF EQTB[3882].INT>0 THEN PRINTNL(753);
THRESHOLD:=EQTB[3851].INT;SECONDPASS:=TRUE;END;
30:IF EQTB[3882].INT>0 THEN ENDDIAGNOSTI(TRUE);{:823};{836:}
POSTLINEBREA(FINALWIDOWPE){:836};{825:}Q:=MEM[25006].HH.RH;
WHILE Q<>25006 DO BEGIN CURP:=MEM[Q].HH.RH;
IF MEM[Q].HH.B0=2 THEN FREENODE(Q,7)ELSE FREENODE(Q,3);Q:=CURP;END;
Q:=PASSIVE;WHILE Q<>0 DO BEGIN CURP:=MEM[Q].HH.RH;FREENODE(Q,2);Q:=CURP;
END{:825};PARBEGINLINE:=0;END;{:775}{894:}PROCEDURE NEWHYPHEXCEP;
LABEL 10,40,45;VAR N:SMALLNUMBER;J:SMALLNUMBER;H:HYPHPOINTER;
K:STRNUMBER;P:HALFWORD;Q:HALFWORD;S,T:STRNUMBER;U,V:POOLPOINTER;
BEGIN SCANLEFTBRAC;{895:}N:=0;P:=0;WHILE TRUE DO BEGIN GETXTOKEN;
CASE CURCMD OF 11,12:{897:}IF CURCHR=45 THEN{898:}
BEGIN IF N>1 THEN BEGIN Q:=GETAVAIL;MEM[Q].HH.RH:=P;MEM[Q].HH.LH:=N;
P:=Q;END;END{:898}
ELSE BEGIN IF EQTB[3466+CURCHR].HH.RH=0 THEN BEGIN PRINTNL(761);
BEGIN HELPPTR:=2;HELPLINE[1]:=762;HELPLINE[0]:=763;END;ERROR;
END ELSE IF N<63 THEN BEGIN N:=N+1;HC[N]:=EQTB[3466+CURCHR].HH.RH;END;
END{:897};10,2:BEGIN IF N>4 THEN{899:}
BEGIN BEGIN IF POOLPTR+N>POOLSIZE THEN OVERFLOW(129,POOLSIZE);END;H:=0;
FOR J:=1 TO N DO BEGIN H:=(H+H+HC[J])MOD 307;
BEGIN STRPOOL[POOLPTR]:=HC[J];POOLPTR:=POOLPTR+1;END;END;S:=MAKESTRING;
WHILE MEM[P].HH.LH>N-3 DO BEGIN Q:=MEM[P].HH.RH;
BEGIN MEM[P].HH.RH:=AVAIL;AVAIL:=P;DYNUSED:=DYNUSED-1;END;P:=Q;END;
{900:}IF HYPHCOUNT=307 THEN OVERFLOW(764,307);HYPHCOUNT:=HYPHCOUNT+1;
WHILE HYPHWORD[H]<>0 DO BEGIN{901:}K:=HYPHWORD[H];
IF(STRSTART[K+1]-STRSTART[K])<(STRSTART[S+1]-STRSTART[S])THEN GOTO 40;
IF(STRSTART[K+1]-STRSTART[K])>(STRSTART[S+1]-STRSTART[S])THEN GOTO 45;
U:=STRSTART[K];V:=STRSTART[S];
REPEAT IF STRPOOL[U]<STRPOOL[V]THEN GOTO 40;
IF STRPOOL[U]>STRPOOL[V]THEN GOTO 45;U:=U+1;V:=V+1;
UNTIL U=STRSTART[K+1];40:Q:=HYPHLIST[H];HYPHLIST[H]:=P;P:=Q;
T:=HYPHWORD[H];HYPHWORD[H]:=S;S:=T;45:{:901};
IF H>0 THEN H:=H-1 ELSE H:=307;END;HYPHWORD[H]:=S;HYPHLIST[H]:=P{:900};
END{:899};IF CURCMD=2 THEN GOTO 10;N:=0;P:=0;END;OTHERS:{896:}
BEGIN PRINTNL(758);BEGIN HELPPTR:=2;HELPLINE[1]:=759;HELPLINE[0]:=760;
END;ERROR;END{:896}END;END{:895};10:END;{:894}{902:}{904:}
FUNCTION NEWTRIEOP(D,N:SMALLNUMBER;V:QUARTERWORD):QUARTERWORD;LABEL 10;
VAR H:0..1022;U:QUARTERWORD;BEGIN H:=ABS(N+313*D+361*V)MOD 1022;
WHILE TRUE DO BEGIN U:=TRIEOPHASH[H];
IF U=0 THEN BEGIN IF TRIEOPPTR>=510 THEN BEGIN TRIEOPPTR:=511;
NEWTRIEOP:=0;GOTO 10;END;TRIEOPPTR:=TRIEOPPTR+1;
HYFDISTANCE[TRIEOPPTR]:=D;HYFNUM[TRIEOPPTR]:=N;HYFNEXT[TRIEOPPTR]:=V;
TRIEOPHASH[H]:=TRIEOPPTR;NEWTRIEOP:=TRIEOPPTR;GOTO 10;END;
IF(HYFDISTANCE[U]=D)AND(HYFNUM[U]=N)AND(HYFNEXT[U]=V)THEN BEGIN
NEWTRIEOP:=U;GOTO 10;END;IF H>0 THEN H:=H-1 ELSE H:=1022;END;10:END;
{:904}{907:}FUNCTION TRIENODE(P:TRIEPOINTER):TRIEPOINTER;LABEL 10;
VAR H:TRIEPOINTER;Q:TRIEPOINTER;
BEGIN H:=ABS(TRIEC[P]+1009*TRIEO[P]+2718*TRIEL[P]+3142*TRIER[P])MOD
TRIESIZE;WHILE TRUE DO BEGIN Q:=TRIEHASH[H];
IF Q=0 THEN BEGIN TRIEHASH[H]:=P;TRIENODE:=P;GOTO 10;END;
IF(TRIEC[Q]=TRIEC[P])AND(TRIEO[Q]=TRIEO[P])AND(TRIEL[Q]=TRIEL[P])AND(
TRIER[Q]=TRIER[P])THEN BEGIN TRIENODE:=Q;GOTO 10;END;
IF H>0 THEN H:=H-1 ELSE H:=TRIESIZE;END;10:END;{:907}{908:}
FUNCTION COMPRESSTRIE(P:TRIEPOINTER):TRIEPOINTER;
BEGIN IF P=0 THEN COMPRESSTRIE:=0 ELSE BEGIN TRIEL[P]:=COMPRESSTRIE(
TRIEL[P]);TRIER[P]:=COMPRESSTRIE(TRIER[P]);COMPRESSTRIE:=TRIENODE(P);
END;END;{:908}{909:}PROCEDURE INITPATTERNM;VAR H:0..1022;P:TRIEPOINTER;
BEGIN FOR H:=0 TO 1022 DO TRIEOPHASH[H]:=0;TRIEOPPTR:=0;TRIEL[0]:=0;
TRIEC[0]:=0;TRIEPTR:=0;FOR P:=0 TO TRIESIZE DO TRIEHASH[P]:=0;END;{:909}
{911:}PROCEDURE INITTRIEMEMO;VAR P:TRIEPOINTER;
BEGIN FOR P:=0 TO TRIEPTR DO TRIEHASH[P]:=0;TRIEMAX:=128;TRIEMIN:=128;
TRIE[0].RH:=1;TRIETAKEN[0]:=FALSE;
FOR P:=1 TO 128 DO BEGIN TRIE[P].LH:=P-1;TRIE[P].RH:=P+1;
TRIETAKEN[P]:=FALSE;END;END;{:911}{913:}
PROCEDURE FIRSTFIT(P:TRIEPOINTER);LABEL 45,40;VAR H:TRIEPOINTER;
Z:TRIEPOINTER;Q:TRIEPOINTER;C:ASCIICODE;BEGIN C:=TRIEC[P];
IF C<TRIEMIN THEN TRIEMIN:=C;Z:=TRIE[TRIEMIN-1].RH;
WHILE TRUE DO BEGIN IF Z<C THEN GOTO 45;H:=Z-C;{914:}
IF TRIEMAX<H+128 THEN BEGIN IF TRIESIZE<=H+128 THEN OVERFLOW(765,
TRIESIZE);REPEAT TRIEMAX:=TRIEMAX+1;TRIETAKEN[TRIEMAX]:=FALSE;
TRIE[TRIEMAX].RH:=TRIEMAX+1;TRIE[TRIEMAX].LH:=TRIEMAX-1;
UNTIL TRIEMAX=H+128;END{:914};IF TRIETAKEN[H]THEN GOTO 45;{915:}
Q:=TRIER[P];WHILE Q>0 DO BEGIN IF TRIE[H+TRIEC[Q]].RH=0 THEN GOTO 45;
Q:=TRIER[Q];END;GOTO 40{:915};45:Z:=TRIE[Z].RH;END;40:{916:}
TRIETAKEN[H]:=TRUE;TRIEHASH[P]:=H;Q:=P;REPEAT Z:=H+TRIEC[Q];
TRIE[TRIE[Z].RH].LH:=TRIE[Z].LH;TRIE[TRIE[Z].LH].RH:=TRIE[Z].RH;
TRIE[Z].RH:=0;Q:=TRIER[Q];UNTIL Q=0{:916};END;{:913}{917:}
PROCEDURE TRIEPACK(P:TRIEPOINTER);VAR Q:TRIEPOINTER;
BEGIN REPEAT Q:=TRIEL[P];
IF(Q>0)AND(TRIEHASH[Q]=0)THEN BEGIN FIRSTFIT(Q);TRIEPACK(Q);END;
P:=TRIER[P];UNTIL P=0;END;{:917}{919:}PROCEDURE TRIEFIX(P:TRIEPOINTER);
VAR Q:TRIEPOINTER;C:ASCIICODE;Z:TRIEPOINTER;BEGIN Z:=TRIEHASH[P];
WHILE P<>0 DO BEGIN Q:=TRIEL[P];C:=TRIEC[P];TRIE[Z+C].RH:=TRIEHASH[Q];
TRIE[Z+C].B1:=C;TRIE[Z+C].B0:=TRIEO[P];IF Q>0 THEN TRIEFIX(Q);
P:=TRIER[P];END;END;{:919}{920:}PROCEDURE NEWPATTERNS;LABEL 30,31;
VAR K,L:SMALLNUMBER;DIGITSENSED:BOOLEAN;V:QUARTERWORD;P,Q:TRIEPOINTER;
FIRSTCHILD:BOOLEAN;C:ASCIICODE;R,S:TRIEPOINTER;H:TWOHALVES;
BEGIN SCANLEFTBRAC;INITPATTERNM;{921:}K:=0;HYF[0]:=0;DIGITSENSED:=FALSE;
WHILE TRUE DO BEGIN GETXTOKEN;CASE CURCMD OF 11,12:{922:}
IF DIGITSENSED OR(CURCHR<48)OR(CURCHR>57)THEN BEGIN IF CURCHR=46 THEN
CURCHR:=127 ELSE BEGIN CURCHR:=EQTB[3466+CURCHR].HH.RH;
IF CURCHR=0 THEN BEGIN PRINTNL(768);BEGIN HELPPTR:=1;HELPLINE[0]:=767;
END;ERROR;CURCHR:=127;END;END;IF K<63 THEN BEGIN K:=K+1;HC[K]:=CURCHR;
HYF[K]:=0;DIGITSENSED:=FALSE;END;END ELSE BEGIN HYF[K]:=CURCHR-48;
DIGITSENSED:=TRUE;END{:922};10,2:BEGIN IF K>0 THEN{923:}BEGIN{925:}L:=K;
V:=0;WHILE TRUE DO BEGIN IF HYF[L]<>0 THEN V:=NEWTRIEOP(K-L,HYF[L],V);
IF L>0 THEN L:=L-1 ELSE GOTO 31;END;31:{:925};Q:=0;
WHILE L<K DO BEGIN L:=L+1;C:=HC[L];P:=TRIEL[Q];FIRSTCHILD:=TRUE;
WHILE(P>0)AND(C>TRIEC[P])DO BEGIN Q:=P;P:=TRIER[Q];FIRSTCHILD:=FALSE;
END;IF(P=0)OR(C<TRIEC[P])THEN{924:}
BEGIN IF TRIEPTR=TRIESIZE THEN OVERFLOW(765,TRIESIZE);
TRIEPTR:=TRIEPTR+1;TRIER[TRIEPTR]:=P;P:=TRIEPTR;TRIEL[P]:=0;
IF FIRSTCHILD THEN TRIEL[Q]:=P ELSE TRIER[Q]:=P;TRIEC[P]:=C;TRIEO[P]:=0;
END{:924};Q:=P;END;IF TRIEO[Q]<>0 THEN BEGIN PRINTNL(769);
BEGIN HELPPTR:=1;HELPLINE[0]:=767;END;ERROR;END;TRIEO[Q]:=V;END{:923};
IF CURCMD=2 THEN GOTO 30;K:=0;HYF[0]:=0;DIGITSENSED:=FALSE;END;
OTHERS:BEGIN PRINTNL(766);BEGIN HELPPTR:=1;HELPLINE[0]:=767;END;ERROR;
END END;END;30:{:921};TRIEL[0]:=COMPRESSTRIE(TRIEL[0]);{926:}
INITTRIEMEMO;IF TRIEL[0]<>0 THEN BEGIN FIRSTFIT(TRIEL[0]);
TRIEPACK(TRIEL[0]);END;{918:}R:=0;WHILE TRIETAKEN[R]DO R:=R+1;
TRIEHASH[0]:=R;TRIEFIX(TRIEL[0]){:918};R:=0;H.RH:=0;H.B0:=0;H.B1:=0;
REPEAT S:=TRIE[R].RH;TRIE[R]:=H;R:=S;UNTIL R>TRIEMAX{:926};END;{:920}
{:902}{928:}FUNCTION PRUNEPAGETOP(P:HALFWORD):HALFWORD;
VAR PREVP:HALFWORD;Q:HALFWORD;BEGIN PREVP:=25003;MEM[25003].HH.RH:=P;
WHILE P<>0 DO CASE MEM[P].HH.B0 OF 0,1,2:{929:}BEGIN Q:=NEWSKIPPARAM(9);
MEM[PREVP].HH.RH:=Q;MEM[Q].HH.RH:=P;
IF MEM[TEMPPTR+1].INT>MEM[P+3].INT THEN MEM[TEMPPTR+1].INT:=MEM[TEMPPTR
+1].INT-MEM[P+3].INT ELSE MEM[TEMPPTR+1].INT:=0;P:=0;END{:929};
8,4,3:BEGIN PREVP:=P;P:=MEM[PREVP].HH.RH;END;10,11,12:BEGIN Q:=P;
P:=MEM[Q].HH.RH;MEM[Q].HH.RH:=0;MEM[PREVP].HH.RH:=P;FLUSHNODELIS(Q);END;
OTHERS:CONFUSION(770)END;PRUNEPAGETOP:=MEM[25003].HH.RH;END;{:928}{930:}
FUNCTION VERTBREAK(P:HALFWORD;H,D:SCALED):HALFWORD;LABEL 30,45,90;
VAR PREVP:HALFWORD;Q,R:HALFWORD;PI:INTEGER;B:INTEGER;LEASTCOST:INTEGER;
BESTPLACE:HALFWORD;PREVDP:SCALED;T:SMALLNUMBER;BEGIN PREVP:=P;
LEASTCOST:=1073741823;ACTIVEWIDTH[1]:=0;ACTIVEWIDTH[2]:=0;
ACTIVEWIDTH[3]:=0;ACTIVEWIDTH[4]:=0;ACTIVEWIDTH[5]:=0;ACTIVEWIDTH[6]:=0;
PREVDP:=0;WHILE TRUE DO BEGIN{932:}IF P=0 THEN PI:=-10000 ELSE{933:}
CASE MEM[P].HH.B0 OF 0,1,2:BEGIN ACTIVEWIDTH[1]:=ACTIVEWIDTH[1]+PREVDP+
MEM[P+3].INT;PREVDP:=MEM[P+2].INT;GOTO 45;END;8:{1315:}GOTO 45{:1315};
10:IF(MEM[PREVP].HH.B0<9)THEN PI:=0 ELSE GOTO 90;
11:BEGIN IF MEM[P].HH.RH=0 THEN T:=12 ELSE T:=MEM[MEM[P].HH.RH].HH.B0;
IF T=10 THEN PI:=0 ELSE GOTO 90;END;12:PI:=MEM[P+1].INT;4,3:GOTO 45;
OTHERS:CONFUSION(771)END{:933};{934:}IF PI<10000 THEN BEGIN{935:}
IF ACTIVEWIDTH[1]<H THEN IF(ACTIVEWIDTH[3]<>0)OR(ACTIVEWIDTH[4]<>0)OR(
ACTIVEWIDTH[5]<>0)THEN B:=0 ELSE B:=BADNESS(H-ACTIVEWIDTH[1],ACTIVEWIDTH
[2])ELSE IF ACTIVEWIDTH[1]-H>ACTIVEWIDTH[6]THEN B:=1073741823 ELSE B:=
BADNESS(ACTIVEWIDTH[1]-H,ACTIVEWIDTH[6]){:935};
IF B<=10000 THEN IF PI<=-10000 THEN B:=PI ELSE B:=B+PI;
IF B<=LEASTCOST THEN BEGIN BESTPLACE:=P;LEASTCOST:=B;
BESTHEIGHTPL:=ACTIVEWIDTH[1]+PREVDP;END;
IF(B=1073741823)OR(PI<=-10000)THEN GOTO 30;END{:934};
IF(MEM[P].HH.B0<10)OR(MEM[P].HH.B0>11)THEN GOTO 45;90:{936:}
IF MEM[P].HH.B0=11 THEN Q:=P ELSE BEGIN Q:=MEM[P+1].HH.LH;
ACTIVEWIDTH[2+MEM[Q].HH.B0]:=ACTIVEWIDTH[2+MEM[Q].HH.B0]+MEM[Q+2].INT;
ACTIVEWIDTH[6]:=ACTIVEWIDTH[6]+MEM[Q+3].INT;
IF(MEM[Q].HH.B1<>0)AND(MEM[Q+3].INT<>0)THEN BEGIN PRINTNL(772);
BEGIN HELPPTR:=4;HELPLINE[3]:=773;HELPLINE[2]:=774;HELPLINE[1]:=775;
HELPLINE[0]:=741;END;ERROR;R:=NEWSPEC(Q);MEM[R].HH.B1:=0;
DELETEGLUERE(Q);MEM[P+1].HH.LH:=R;END;END;
ACTIVEWIDTH[1]:=ACTIVEWIDTH[1]+PREVDP+MEM[Q+1].INT;PREVDP:=0{:936};
45:IF PREVDP>D THEN BEGIN ACTIVEWIDTH[1]:=ACTIVEWIDTH[1]+PREVDP-D;
PREVDP:=D;END;{:932};PREVP:=P;P:=MEM[PREVP].HH.RH;END;
30:VERTBREAK:=BESTPLACE;END;{:930}{937:}FUNCTION VSPLIT(N:EIGHTBITS;
H:SCALED):HALFWORD;LABEL 10,30;VAR V:HALFWORD;P:HALFWORD;Q:HALFWORD;
BEGIN V:=EQTB[2904+N].HH.RH;
IF CURMARK[3]<>0 THEN BEGIN DELETETOKENR(CURMARK[3]);CURMARK[3]:=0;
DELETETOKENR(CURMARK[4]);CURMARK[4]:=0;END;{938:}
IF V=0 THEN BEGIN VSPLIT:=0;GOTO 10;END;
IF MEM[V].HH.B0<>1 THEN BEGIN PRINTNL(776);BEGIN HELPPTR:=2;
HELPLINE[1]:=777;HELPLINE[0]:=778;END;ERROR;VSPLIT:=0;GOTO 10;END{:938};
Q:=VERTBREAK(MEM[V+5].HH.RH,H,EQTB[4284].INT);{939:}P:=MEM[V+5].HH.RH;
IF P=Q THEN MEM[V+5].HH.RH:=0 ELSE WHILE TRUE DO BEGIN IF MEM[P].HH.B0=4
THEN IF CURMARK[3]=0 THEN BEGIN CURMARK[3]:=MEM[P+1].INT;
CURMARK[4]:=CURMARK[3];MEM[CURMARK[3]].HH.LH:=MEM[CURMARK[3]].HH.LH+2;
END ELSE BEGIN DELETETOKENR(CURMARK[4]);CURMARK[4]:=MEM[P+1].INT;
MEM[CURMARK[4]].HH.LH:=MEM[CURMARK[4]].HH.LH+1;END;
IF MEM[P].HH.RH=Q THEN BEGIN MEM[P].HH.RH:=0;GOTO 30;END;
P:=MEM[P].HH.RH;END;30:{:939};Q:=PRUNEPAGETOP(Q);P:=MEM[V+5].HH.RH;
FREENODE(V,7);
IF Q=0 THEN EQTB[2904+N].HH.RH:=0 ELSE EQTB[2904+N].HH.RH:=VPACKAGE(Q,0,
1,1073741823);VSPLIT:=VPACKAGE(P,H,0,EQTB[4284].INT);10:END;{:937}{946:}
PROCEDURE FREEZEPAGESP(S:SMALLNUMBER);BEGIN PAGECONTENTS:=S;
PAGESOFAR[0]:=EQTB[4282].INT;PAGEMAXDEPTH:=EQTB[4283].INT;
PAGESOFAR[7]:=0;PAGESOFAR[1]:=0;PAGESOFAR[2]:=0;PAGESOFAR[3]:=0;
PAGESOFAR[4]:=0;PAGESOFAR[5]:=0;PAGESOFAR[6]:=0;
LEASTPAGECOS:=1073741823;IF EQTB[3883].INT>0 THEN BEGIN BEGINDIAGNOS;
PRINTNL(796);PRINTSCALED(PAGESOFAR[0]);PRINT(797);
PRINTSCALED(PAGEMAXDEPTH);ENDDIAGNOSTI(FALSE);END;END;{:946}{951:}
PROCEDURE BOX255ERROR;BEGIN ERROR;BEGINDIAGNOS;PRINTNL(655);
SHOWBOX(EQTB[3159].HH.RH);ENDDIAGNOSTI(TRUE);
FLUSHNODELIS(EQTB[3159].HH.RH);EQTB[3159].HH.RH:=0;END;{:951}{952:}
{970:}PROCEDURE FIREUP(C:HALFWORD);LABEL 10;VAR P,Q,R,S:HALFWORD;
PREVP:HALFWORD;N:0..255;WAIT:BOOLEAN;SAVEVBADNESS:INTEGER;
SAVEVFUZZ:SCALED;SAVESPLITTOP:HALFWORD;BEGIN{971:}
IF MEM[BESTPAGEBREA].HH.B0=12 THEN BEGIN GEQWORDDEFIN(3888,MEM[
BESTPAGEBREA+1].INT);MEM[BESTPAGEBREA+1].INT:=10000;
END ELSE GEQWORDDEFIN(3888,10000){:971};
IF CURMARK[2]<>0 THEN BEGIN IF CURMARK[0]<>0 THEN DELETETOKENR(CURMARK[0
]);CURMARK[0]:=CURMARK[2];
MEM[CURMARK[0]].HH.LH:=MEM[CURMARK[0]].HH.LH+1;DELETETOKENR(CURMARK[1]);
CURMARK[1]:=0;END;{972:}IF C=BESTPAGEBREA THEN BESTPAGEBREA:=0;{973:}
IF EQTB[3159].HH.RH<>0 THEN BEGIN PRINTNL(808);BEGIN HELPPTR:=2;
HELPLINE[1]:=809;HELPLINE[0]:=810;END;BOX255ERROR;END{:973};
INSERTPENALT:=0;SAVESPLITTOP:=EQTB[2378].HH.RH;{976:}
R:=MEM[25000].HH.RH;
WHILE R<>25000 DO BEGIN IF MEM[R+2].HH.LH<>0 THEN BEGIN N:=MEM[R].HH.B1;
IF EQTB[2904+N].HH.RH=0 THEN EQTB[2904+N].HH.RH:=NEWNULLBOX;
P:=EQTB[2904+N].HH.RH+5;WHILE MEM[P].HH.RH<>0 DO P:=MEM[P].HH.RH;
MEM[R+2].HH.RH:=P;END;R:=MEM[R].HH.RH;END{:976};Q:=25004;
MEM[Q].HH.RH:=0;PREVP:=25002;P:=MEM[PREVP].HH.RH;
WHILE P<>BESTPAGEBREA DO BEGIN IF MEM[P].HH.B0=3 THEN{978:}
BEGIN R:=MEM[25000].HH.RH;
WHILE MEM[R].HH.B1<>MEM[P].HH.B1 DO R:=MEM[R].HH.RH;
IF MEM[R+2].HH.LH=0 THEN WAIT:=TRUE ELSE BEGIN WAIT:=FALSE;
S:=MEM[P+4].HH.LH;MEM[MEM[R+2].HH.RH].HH.RH:=S;S:=MEM[R+2].HH.RH;
IF MEM[R+2].HH.LH=P THEN{979:}
BEGIN IF MEM[R].HH.B0=1 THEN IF(MEM[R+1].HH.LH=P)AND(MEM[R+1].HH.RH<>0)
THEN BEGIN WHILE MEM[S].HH.RH<>MEM[R+1].HH.RH DO S:=MEM[S].HH.RH;
EQTB[2378].HH.RH:=MEM[P+4].HH.RH;
MEM[P+4].HH.LH:=PRUNEPAGETOP(MEM[R+1].HH.RH);
IF MEM[P+4].HH.LH<>0 THEN BEGIN TEMPPTR:=VPACKAGE(MEM[P+4].HH.LH,0,1,
1073741823);MEM[P+3].INT:=MEM[TEMPPTR+3].INT+MEM[TEMPPTR+2].INT;
FREENODE(TEMPPTR,7);WAIT:=TRUE;END;MEM[S].HH.RH:=0;END;
MEM[R+2].HH.LH:=0;N:=MEM[R].HH.B1;
TEMPPTR:=MEM[EQTB[2904+N].HH.RH+5].HH.RH;FREENODE(EQTB[2904+N].HH.RH,7);
EQTB[2904+N].HH.RH:=VPACKAGE(TEMPPTR,0,1,1073741823);END{:979}
ELSE BEGIN WHILE MEM[S].HH.RH<>0 DO S:=MEM[S].HH.RH;MEM[R+2].HH.RH:=S;
END;END;{980:}MEM[PREVP].HH.RH:=MEM[P].HH.RH;MEM[P].HH.RH:=0;
IF WAIT THEN BEGIN MEM[Q].HH.RH:=P;Q:=P;INSERTPENALT:=INSERTPENALT+1;
END ELSE BEGIN DELETEGLUERE(MEM[P+4].HH.RH);FREENODE(P,5);END;
P:=PREVP{:980};END{:978}ELSE IF MEM[P].HH.B0=4 THEN{974:}
BEGIN IF CURMARK[1]=0 THEN BEGIN CURMARK[1]:=MEM[P+1].INT;
MEM[CURMARK[1]].HH.LH:=MEM[CURMARK[1]].HH.LH+1;END;
IF CURMARK[2]<>0 THEN DELETETOKENR(CURMARK[2]);CURMARK[2]:=MEM[P+1].INT;
MEM[CURMARK[2]].HH.LH:=MEM[CURMARK[2]].HH.LH+1;END{:974};PREVP:=P;
P:=MEM[PREVP].HH.RH;END;EQTB[2378].HH.RH:=SAVESPLITTOP;{975:}
IF P<>0 THEN BEGIN IF MEM[25001].HH.RH=0 THEN IF NESTPTR=0 THEN CURLIST.
TAILFIELD:=PAGETAIL ELSE NEST[0].TAILFIELD:=PAGETAIL;
MEM[PAGETAIL].HH.RH:=MEM[25001].HH.RH;MEM[25001].HH.RH:=P;
MEM[PREVP].HH.RH:=0;END;SAVEVBADNESS:=EQTB[3877].INT;
EQTB[3877].INT:=10000;SAVEVFUZZ:=EQTB[4287].INT;
EQTB[4287].INT:=1073741823;
EQTB[3159].HH.RH:=VPACKAGE(MEM[25002].HH.RH,BESTSIZE,0,PAGEMAXDEPTH);
EQTB[3877].INT:=SAVEVBADNESS;EQTB[4287].INT:=SAVEVFUZZ;
IF LASTPAGEGLUE<>262143 THEN DELETEGLUERE(LASTPAGEGLUE);{950:}
PAGECONTENTS:=0;PAGETAIL:=25002;MEM[25002].HH.RH:=0;
LASTPAGEGLUE:=262143;PAGESOFAR[7]:=0;PAGEMAXDEPTH:=0{:950};
IF Q<>25004 THEN BEGIN MEM[25002].HH.RH:=MEM[25004].HH.RH;PAGETAIL:=Q;
END{:975};{977:}R:=MEM[25000].HH.RH;
WHILE R<>25000 DO BEGIN Q:=MEM[R].HH.RH;FREENODE(R,4);R:=Q;END;
MEM[25000].HH.RH:=25000{:977}{:972};
IF(CURMARK[0]<>0)AND(CURMARK[1]=0)THEN BEGIN CURMARK[1]:=CURMARK[0];
MEM[CURMARK[0]].HH.LH:=MEM[CURMARK[0]].HH.LH+1;END;
IF EQTB[2899].HH.RH<>0 THEN IF DEADCYCLES>=EQTB[3889].INT THEN{982:}
BEGIN PRINTNL(811);PRINTINT(EQTB[3889].INT);PRINT(812);BEGIN HELPPTR:=3;
HELPLINE[2]:=813;HELPLINE[1]:=814;HELPLINE[0]:=815;END;ERROR;END{:982}
ELSE{983:}BEGIN OUTPUTACTIVE:=TRUE;DEADCYCLES:=DEADCYCLES+1;PUSHNEST;
CURLIST.MODEFIELD:=-1;CURLIST.AUXFIELD:=-65536000;
CURLIST.MLFIELD:=-LINE;BEGINTOKENLI(EQTB[2899].HH.RH,6);NEWSAVELEVEL(7);
NORMALPARAGR;SCANLEFTBRAC;GOTO 10;END{:983};{981:}
BEGIN IF MEM[25002].HH.RH<>0 THEN BEGIN IF MEM[25001].HH.RH=0 THEN IF
NESTPTR=0 THEN CURLIST.TAILFIELD:=PAGETAIL ELSE NEST[0].TAILFIELD:=
PAGETAIL ELSE MEM[PAGETAIL].HH.RH:=MEM[25001].HH.RH;
MEM[25001].HH.RH:=MEM[25002].HH.RH;MEM[25002].HH.RH:=0;PAGETAIL:=25002;
END;SHIPOUT(EQTB[3159].HH.RH);EQTB[3159].HH.RH:=0;END{:981};10:END;
{:970}PROCEDURE BUILDPAGE;LABEL 10,30,31,22,80,90;VAR P:HALFWORD;
Q,R:HALFWORD;B,C:INTEGER;PI:INTEGER;N:0..255;DELTA,H,W:SCALED;
BEGIN IF(MEM[25001].HH.RH=0)OR OUTPUTACTIVE THEN GOTO 10;
REPEAT 22:P:=MEM[25001].HH.RH;{954:}
IF LASTPAGEGLUE<>262143 THEN DELETEGLUERE(LASTPAGEGLUE);
IF MEM[P].HH.B0=10 THEN BEGIN LASTPAGEGLUE:=MEM[P+1].HH.LH;
MEM[LASTPAGEGLUE].HH.RH:=MEM[LASTPAGEGLUE].HH.RH+1;
END ELSE LASTPAGEGLUE:=262143{:954};{955:}{958:}
CASE MEM[P].HH.B0 OF 0,1,2:IF PAGECONTENTS<2 THEN{959:}
BEGIN IF PAGECONTENTS=0 THEN FREEZEPAGESP(2)ELSE PAGECONTENTS:=2;
Q:=NEWSKIPPARAM(8);MEM[Q].HH.RH:=P;
IF MEM[TEMPPTR+1].INT>MEM[P+3].INT THEN MEM[TEMPPTR+1].INT:=MEM[TEMPPTR
+1].INT-MEM[P+3].INT ELSE MEM[TEMPPTR+1].INT:=0;MEM[Q].HH.RH:=P;
MEM[25001].HH.RH:=Q;GOTO 22;END{:959}ELSE{960:}
BEGIN PAGESOFAR[1]:=PAGESOFAR[1]+PAGESOFAR[7]+MEM[P+3].INT;
PAGESOFAR[7]:=MEM[P+2].INT;GOTO 80;END{:960};8:{1314:}GOTO 80{:1314};
10:IF PAGECONTENTS<2 THEN GOTO 31 ELSE IF(MEM[PAGETAIL].HH.B0<9)THEN PI
:=0 ELSE GOTO 90;
11:IF PAGECONTENTS<2 THEN GOTO 31 ELSE IF MEM[P].HH.RH=0 THEN GOTO 10
ELSE IF MEM[MEM[P].HH.RH].HH.B0=10 THEN PI:=0 ELSE GOTO 90;
12:IF PAGECONTENTS<2 THEN GOTO 31 ELSE PI:=MEM[P+1].INT;4:GOTO 80;
3:{966:}BEGIN IF PAGECONTENTS=0 THEN FREEZEPAGESP(1);N:=MEM[P].HH.B1;
R:=25000;WHILE N>=MEM[MEM[R].HH.RH].HH.B1 DO R:=MEM[R].HH.RH;N:=N;
IF MEM[R].HH.B1<>N THEN{967:}BEGIN Q:=GETNODE(4);
MEM[Q].HH.RH:=MEM[R].HH.RH;MEM[R].HH.RH:=Q;R:=Q;MEM[R].HH.B1:=N;
MEM[R].HH.B0:=0;
IF EQTB[2904+N].HH.RH=0 THEN MEM[R+3].INT:=0 ELSE MEM[R+3].INT:=MEM[EQTB
[2904+N].HH.RH+3].INT+MEM[EQTB[2904+N].HH.RH+2].INT;MEM[R+2].HH.LH:=0;
Q:=EQTB[2386+N].HH.RH;
IF EQTB[3893+N].INT=1000 THEN H:=MEM[R+3].INT ELSE H:=XOVERN(MEM[R+3].
INT,1000)*EQTB[3893+N].INT;PAGESOFAR[0]:=PAGESOFAR[0]-H-MEM[Q+1].INT;
PAGESOFAR[2+MEM[Q].HH.B0]:=PAGESOFAR[2+MEM[Q].HH.B0]+MEM[Q+2].INT;
PAGESOFAR[6]:=PAGESOFAR[6]+MEM[Q+3].INT;
IF(MEM[Q].HH.B1<>0)AND(MEM[Q+3].INT<>0)THEN BEGIN PRINTNL(803);
PRINTINT(N);BEGIN HELPPTR:=3;HELPLINE[2]:=804;HELPLINE[1]:=805;
HELPLINE[0]:=741;END;ERROR;END;END{:967};
IF MEM[R].HH.B0=1 THEN INSERTPENALT:=INSERTPENALT+MEM[P+1].INT ELSE
BEGIN MEM[R+2].HH.RH:=P;
DELTA:=PAGESOFAR[0]-PAGESOFAR[1]-PAGESOFAR[7]+PAGESOFAR[6];
IF EQTB[3893+N].INT=1000 THEN H:=MEM[P+3].INT ELSE H:=XOVERN(MEM[P+3].
INT,1000)*EQTB[3893+N].INT;
IF(H<=DELTA)AND(MEM[P+3].INT+MEM[R+3].INT<=EQTB[4296+N].INT)THEN BEGIN
PAGESOFAR[0]:=PAGESOFAR[0]-H;MEM[R+3].INT:=MEM[R+3].INT+MEM[P+3].INT;
END ELSE{968:}
BEGIN IF EQTB[3893+N].INT<=0 THEN W:=1073741823 ELSE BEGIN W:=PAGESOFAR[
0]-PAGESOFAR[1]-PAGESOFAR[7];
IF EQTB[3893+N].INT<>1000 THEN W:=XOVERN(W,EQTB[3893+N].INT)*1000;END;
IF W>EQTB[4296+N].INT-MEM[R+3].INT THEN W:=EQTB[4296+N].INT-MEM[R+3].INT
;Q:=VERTBREAK(MEM[P+4].HH.LH,W,MEM[P+2].INT);
MEM[R+3].INT:=MEM[R+3].INT+BESTHEIGHTPL;IF EQTB[3883].INT>0 THEN{969:}
BEGIN BEGINDIAGNOS;PRINTNL(806);PRINTINT(N);PRINT(807);PRINTSCALED(W);
PRINTCHAR(44);PRINTSCALED(BESTHEIGHTPL);PRINT(750);
IF Q=0 THEN PRINTINT(-10000)ELSE IF MEM[Q].HH.B0=12 THEN PRINTINT(MEM[Q
+1].INT)ELSE PRINTCHAR(48);ENDDIAGNOSTI(FALSE);END{:969};
IF EQTB[3893+N].INT<>1000 THEN BESTHEIGHTPL:=XOVERN(BESTHEIGHTPL,1000)*
EQTB[3893+N].INT;PAGESOFAR[0]:=PAGESOFAR[0]-BESTHEIGHTPL;
MEM[R].HH.B0:=1;MEM[R+1].HH.RH:=Q;MEM[R+1].HH.LH:=P;
IF Q=0 THEN INSERTPENALT:=INSERTPENALT-10000 ELSE IF MEM[Q].HH.B0=12
THEN INSERTPENALT:=INSERTPENALT+MEM[Q+1].INT;END{:968};END;GOTO 80;
END{:966};OTHERS:CONFUSION(798)END{:958};{963:}
IF PI<10000 THEN BEGIN{965:}
IF PAGESOFAR[1]<PAGESOFAR[0]THEN IF(PAGESOFAR[3]<>0)OR(PAGESOFAR[4]<>0)
OR(PAGESOFAR[5]<>0)THEN B:=0 ELSE B:=BADNESS(PAGESOFAR[0]-PAGESOFAR[1],
PAGESOFAR[2])ELSE IF PAGESOFAR[1]-PAGESOFAR[0]>PAGESOFAR[6]THEN B:=
1073741823 ELSE B:=BADNESS(PAGESOFAR[1]-PAGESOFAR[0],PAGESOFAR[6]){:965}
;
IF B<=10000 THEN IF PI<=-10000 THEN C:=PI ELSE C:=B+PI+INSERTPENALT ELSE
C:=B;IF INSERTPENALT>=10000 THEN C:=1073741823;
IF EQTB[3883].INT>0 THEN{964:}BEGIN BEGINDIAGNOS;PRINTNL(37);PRINT(746);
PRINTSCALED(PAGESOFAR[1]);PRINT(801);PRINTSCALED(PAGESOFAR[0]);
PRINT(749);IF B=1073741823 THEN PRINTCHAR(42)ELSE PRINTINT(B);
PRINT(750);PRINTINT(PI);PRINT(802);
IF C=1073741823 THEN PRINTCHAR(42)ELSE PRINTINT(C);
IF C<=LEASTPAGECOS THEN PRINTCHAR(35);ENDDIAGNOSTI(FALSE);END{:964};
IF C<=LEASTPAGECOS THEN BEGIN BESTPAGEBREA:=P;BESTSIZE:=PAGESOFAR[0];
LEASTPAGECOS:=C;R:=MEM[25000].HH.RH;
WHILE R<>25000 DO BEGIN MEM[R+2].HH.LH:=MEM[R+2].HH.RH;R:=MEM[R].HH.RH;
END;END;IF(C=1073741823)OR(PI<=-10000)THEN BEGIN FIREUP(P);
IF OUTPUTACTIVE THEN GOTO 10;GOTO 30;END;END{:963};
IF(MEM[P].HH.B0<10)OR(MEM[P].HH.B0>11)THEN GOTO 80;90:{962:}
IF MEM[P].HH.B0=11 THEN Q:=P ELSE BEGIN Q:=MEM[P+1].HH.LH;
PAGESOFAR[2+MEM[Q].HH.B0]:=PAGESOFAR[2+MEM[Q].HH.B0]+MEM[Q+2].INT;
PAGESOFAR[6]:=PAGESOFAR[6]+MEM[Q+3].INT;
IF(MEM[Q].HH.B1<>0)AND(MEM[Q+3].INT<>0)THEN BEGIN PRINTNL(799);
BEGIN HELPPTR:=4;HELPLINE[3]:=800;HELPLINE[2]:=774;HELPLINE[1]:=775;
HELPLINE[0]:=741;END;ERROR;R:=NEWSPEC(Q);MEM[R].HH.B1:=0;
DELETEGLUERE(Q);MEM[P+1].HH.LH:=R;END;END;
PAGESOFAR[1]:=PAGESOFAR[1]+PAGESOFAR[7]+MEM[Q+1].INT;
PAGESOFAR[7]:=0{:962};80:{961:}
IF PAGESOFAR[7]>PAGEMAXDEPTH THEN BEGIN PAGESOFAR[1]:=PAGESOFAR[1]+
PAGESOFAR[7]-PAGEMAXDEPTH;PAGESOFAR[7]:=PAGEMAXDEPTH;END;{:961};{956:}
MEM[PAGETAIL].HH.RH:=P;PAGETAIL:=P;MEM[25001].HH.RH:=MEM[P].HH.RH;
MEM[P].HH.RH:=0;GOTO 30{:956};31:{957:}MEM[25001].HH.RH:=MEM[P].HH.RH;
MEM[P].HH.RH:=0;FLUSHNODELIS(P){:957};30:{:955};
UNTIL MEM[25001].HH.RH=0;{953:}
IF NESTPTR=0 THEN CURLIST.TAILFIELD:=25001 ELSE NEST[0].TAILFIELD:=25001
{:953};10:END;{:952}{988:}{1001:}PROCEDURE APPSPACE;VAR P:HALFWORD;
Q:HALFWORD;F:INTERNALFONT;K:0..FONTMEMSIZE;
BEGIN IF(CURLIST.AUXFIELD>=2000)AND(EQTB[2381].HH.RH<>0)THEN Q:=
NEWPARAMGLUE(12)ELSE BEGIN IF EQTB[2380].HH.RH<>0 THEN P:=EQTB[2380].HH.
RH ELSE{1000:}BEGIN P:=FONTGLUE[EQTB[3160].HH.RH];
IF P=0 THEN BEGIN F:=EQTB[3160].HH.RH;P:=NEWSPEC(0);K:=PARAMBASE[F]+2;
MEM[P+1].INT:=FONTINFO[K].INT;MEM[P+2].INT:=FONTINFO[K+1].INT;
MEM[P+3].INT:=FONTINFO[K+2].INT;FONTGLUE[F]:=P;END;END{:1000};
P:=NEWSPEC(P);{1002:}
IF CURLIST.AUXFIELD>=2000 THEN MEM[P+1].INT:=MEM[P+1].INT+FONTINFO[7+
PARAMBASE[EQTB[3160].HH.RH]].INT;
MEM[P+2].INT:=XNOVERD(MEM[P+2].INT,CURLIST.AUXFIELD,1000);
MEM[P+3].INT:=XNOVERD(MEM[P+3].INT,1000,CURLIST.AUXFIELD){:1002};
Q:=NEWGLUE(P);MEM[P].HH.RH:=0;END;MEM[CURLIST.TAILFIELD].HH.RH:=Q;
CURLIST.TAILFIELD:=Q;END;{:1001}{1005:}PROCEDURE INSERTDOLLAR;
BEGIN BACKINPUT;CURTOK:=804;PRINTNL(823);BEGIN HELPPTR:=2;
HELPLINE[1]:=824;HELPLINE[0]:=825;END;INSERROR;END;{:1005}{1007:}
PROCEDURE YOUCANT;BEGIN PRINTNL(826);PRINTCMDCHR(CURCMD,CURCHR);
PRINT(827);PRINTMODE(CURLIST.MODEFIELD);END;{:1007}{1008:}
PROCEDURE REPORTILLEGA;BEGIN YOUCANT;BEGIN HELPPTR:=4;HELPLINE[3]:=828;
HELPLINE[2]:=829;HELPLINE[1]:=830;HELPLINE[0]:=831;END;ERROR;END;{:1008}
{1009:}FUNCTION PRIVILEGED:BOOLEAN;
BEGIN IF CURLIST.MODEFIELD>0 THEN PRIVILEGED:=TRUE ELSE BEGIN
REPORTILLEGA;PRIVILEGED:=FALSE;END;END;{:1009}{1012:}
FUNCTION ITSALLOVER:BOOLEAN;LABEL 10;
BEGIN IF PRIVILEGED THEN BEGIN IF((25002=PAGETAIL)AND(CURLIST.HEADFIELD=
CURLIST.TAILFIELD)AND(DEADCYCLES=0))OR(DEADCYCLES>EQTB[3889].INT)THEN
BEGIN IF DEADCYCLES>0 THEN BEGIN PRINTNL(834);END;ITSALLOVER:=TRUE;
GOTO 10;END;BACKINPUT;BEGIN MEM[CURLIST.TAILFIELD].HH.RH:=NEWNULLBOX;
CURLIST.TAILFIELD:=MEM[CURLIST.TAILFIELD].HH.RH;END;
MEM[CURLIST.TAILFIELD+1].INT:=EQTB[4281].INT;
BEGIN MEM[CURLIST.TAILFIELD].HH.RH:=NEWPENALTY(-10000);
CURLIST.TAILFIELD:=MEM[CURLIST.TAILFIELD].HH.RH;END;BUILDPAGE;END;
ITSALLOVER:=FALSE;10:END;{:1012}{1018:}PROCEDURE APPENDGLUE;
VAR S:SMALLNUMBER;BEGIN S:=CURCHR;CASE S OF 0:CURVAL:=4;1:CURVAL:=8;
2:CURVAL:=12;3:CURVAL:=16;4:SCANGLUE(2);5:SCANGLUE(3);END;
BEGIN MEM[CURLIST.TAILFIELD].HH.RH:=NEWGLUE(CURVAL);
CURLIST.TAILFIELD:=MEM[CURLIST.TAILFIELD].HH.RH;END;
IF S>=4 THEN BEGIN MEM[CURVAL].HH.RH:=MEM[CURVAL].HH.RH-1;
IF S>4 THEN MEM[CURLIST.TAILFIELD].HH.B1:=99;END;END;{:1018}{1019:}
PROCEDURE APPENDKERN;VAR S:QUARTERWORD;BEGIN S:=CURCHR;
SCANDIMEN(S=99,FALSE,FALSE);
BEGIN MEM[CURLIST.TAILFIELD].HH.RH:=NEWKERN(CURVAL);
CURLIST.TAILFIELD:=MEM[CURLIST.TAILFIELD].HH.RH;END;
MEM[CURLIST.TAILFIELD].HH.B1:=S;END;{:1019}{1022:}PROCEDURE OFFSAVE;
VAR P:HALFWORD;BEGIN IF CURGROUP=0 THEN{1024:}BEGIN PRINTNL(605);
PRINTCMDCHR(CURCMD,CURCHR);BEGIN HELPPTR:=1;HELPLINE[0]:=853;END;ERROR;
END{:1024}ELSE BEGIN BACKINPUT;P:=GETAVAIL;MEM[25003].HH.RH:=P;
PRINTNL(845);{1023:}CASE CURGROUP OF 13:BEGIN MEM[P].HH.LH:=6456;
PRINTESC(341);END;14:BEGIN MEM[P].HH.LH:=804;PRINTCHAR(36);END;
15:BEGIN MEM[P].HH.LH:=6457;MEM[P].HH.RH:=GETAVAIL;P:=MEM[P].HH.RH;
MEM[P].HH.LH:=3118;PRINTESC(852);END;OTHERS:BEGIN MEM[P].HH.LH:=637;
PRINTCHAR(125);END END{:1023};PRINT(846);
BEGINTOKENLI(MEM[25003].HH.RH,4);BEGIN HELPPTR:=5;HELPLINE[4]:=847;
HELPLINE[3]:=848;HELPLINE[2]:=849;HELPLINE[1]:=850;HELPLINE[0]:=851;END;
ERROR;END;END;{:1022}{1027:}PROCEDURE EXTRARIGHTBR;BEGIN PRINTNL(858);
CASE CURGROUP OF 13:PRINTESC(341);14:PRINTCHAR(36);15:PRINTESC(696);END;
BEGIN HELPPTR:=5;HELPLINE[4]:=859;HELPLINE[3]:=860;HELPLINE[2]:=861;
HELPLINE[1]:=862;HELPLINE[0]:=863;END;ERROR;ALIGNSTATE:=ALIGNSTATE+1;
END;{:1027}{1028:}PROCEDURE NORMALPARAGR;
BEGIN IF EQTB[3869].INT<>0 THEN EQWORDDEFINE(3869,0);
IF EQTB[4295].INT<>0 THEN EQWORDDEFINE(4295,0);
IF EQTB[3890].INT<>1 THEN EQWORDDEFINE(3890,1);
IF EQTB[2898].HH.RH<>0 THEN EQDEFINE(2898,112,0);END;{:1028}{1033:}
PROCEDURE BOXEND;VAR P:HALFWORD;
BEGIN IF SAVESTACK[SAVEPTR+0].INT<1073741824 THEN{1034:}
BEGIN IF CURBOX<>0 THEN BEGIN MEM[CURBOX+4].INT:=SAVESTACK[SAVEPTR+0].
INT;IF ABS(CURLIST.MODEFIELD)=1 THEN BEGIN APPENDTOVLIS(CURBOX);
IF CURLIST.MODEFIELD>0 THEN BUILDPAGE;
END ELSE BEGIN IF ABS(CURLIST.MODEFIELD)=99 THEN CURLIST.AUXFIELD:=1000
ELSE BEGIN P:=NEWNOAD;MEM[P+1].HH.RH:=2;MEM[P+1].HH.LH:=CURBOX;
CURBOX:=P;END;MEM[CURLIST.TAILFIELD].HH.RH:=CURBOX;
CURLIST.TAILFIELD:=CURBOX;END;END;END{:1034}
ELSE IF SAVESTACK[SAVEPTR+0].INT<1073742336 THEN{1035:}
IF SAVESTACK[SAVEPTR+0].INT<1073742080 THEN EQDEFINE(-1073738920+
SAVESTACK[SAVEPTR+0].INT,113,CURBOX)ELSE GEQDEFINE(-1073739176+SAVESTACK
[SAVEPTR+0].INT,113,CURBOX){:1035}
ELSE IF CURBOX<>0 THEN IF SAVESTACK[SAVEPTR+0].INT>1073742336 THEN{1036:
}BEGIN{384:}REPEAT GETXTOKEN;UNTIL CURCMD<>10{:384};
IF((CURCMD=26)AND(ABS(CURLIST.MODEFIELD)<>1))OR((CURCMD=27)AND(ABS(
CURLIST.MODEFIELD)=1))THEN BEGIN APPENDGLUE;
MEM[CURLIST.TAILFIELD].HH.B1:=SAVESTACK[SAVEPTR+0].INT-(1073742237);
MEM[CURLIST.TAILFIELD+1].HH.RH:=CURBOX;END ELSE BEGIN PRINTNL(879);
BEGIN HELPPTR:=3;HELPLINE[2]:=880;HELPLINE[1]:=881;HELPLINE[0]:=882;END;
ERROR;FLUSHNODELIS(CURBOX);END;END{:1036}ELSE SHIPOUT(CURBOX);END;
{:1033}{1037:}PROCEDURE BEGINBOX;LABEL 10;VAR P:HALFWORD;K:HALFWORD;
N:EIGHTBITS;BEGIN CASE CURCHR OF 0:BEGIN SCANEIGHTBIT;
CURBOX:=EQTB[2904+CURVAL].HH.RH;EQTB[2904+CURVAL].HH.RH:=0;END;
1:BEGIN SCANEIGHTBIT;CURBOX:=COPYNODELIST(EQTB[2904+CURVAL].HH.RH);END;
2:{1038:}BEGIN CURBOX:=0;
IF(CURLIST.MODEFIELD=1)AND(CURLIST.HEADFIELD=CURLIST.TAILFIELD)THEN{1039
:}BEGIN YOUCANT;BEGIN HELPPTR:=2;HELPLINE[1]:=883;HELPLINE[0]:=884;END;
ERROR;END{:1039}
ELSE BEGIN IF NOT(CURLIST.TAILFIELD>25000)THEN IF(MEM[CURLIST.TAILFIELD]
.HH.B0=0)OR(MEM[CURLIST.TAILFIELD].HH.B0=1)THEN BEGIN P:=CURLIST.
HEADFIELD;CURBOX:=CURLIST.TAILFIELD;
WHILE MEM[P].HH.RH<>CURLIST.TAILFIELD DO P:=MEM[P].HH.RH;
CURLIST.TAILFIELD:=P;MEM[P].HH.RH:=0;END;END;END{:1038};3:{1040:}
BEGIN SCANEIGHTBIT;N:=CURVAL;
IF NOT SCANKEYWORD(662)THEN BEGIN PRINTNL(885);BEGIN HELPPTR:=2;
HELPLINE[1]:=886;HELPLINE[0]:=887;END;ERROR;END;
SCANDIMEN(FALSE,FALSE,FALSE);CURBOX:=VSPLIT(N,CURVAL);END{:1040};
OTHERS:{1041:}BEGIN K:=CURCHR-4;SAVEPTR:=SAVEPTR+1;SCANSPEC;
IF K=99 THEN NEWSAVELEVEL(2)ELSE BEGIN IF K=1 THEN NEWSAVELEVEL(3)ELSE
BEGIN NEWSAVELEVEL(4);K:=1;END;NORMALPARAGR;END;PUSHNEST;
CURLIST.MODEFIELD:=-K;
IF K=1 THEN CURLIST.AUXFIELD:=-65536000 ELSE CURLIST.AUXFIELD:=1000;
GOTO 10;END{:1041}END;BOXEND;10:END;{:1037}{1042:}PROCEDURE SCANBOX;
BEGIN{384:}REPEAT GETXTOKEN;UNTIL CURCMD<>10{:384};
IF CURCMD=20 THEN BEGINBOX ELSE IF(SAVESTACK[SAVEPTR+0].INT>=1073742337)
AND((CURCMD=36)OR(CURCMD=35))THEN BEGIN CURBOX:=SCANRULESPEC;BOXEND;
END ELSE BEGIN PRINTNL(888);BEGIN HELPPTR:=3;HELPLINE[2]:=889;
HELPLINE[1]:=890;HELPLINE[0]:=891;END;BACKERROR;END;END;{:1042}{1044:}
PROCEDURE PACKAGE(C:SMALLNUMBER);VAR H:SCALED;P:HALFWORD;D:SCALED;
BEGIN D:=EQTB[4285].INT;UNSAVE;SAVEPTR:=SAVEPTR-3;
IF CURLIST.MODEFIELD=-99 THEN CURBOX:=HPACK(MEM[CURLIST.HEADFIELD].HH.RH
,SAVESTACK[SAVEPTR+2].INT,SAVESTACK[SAVEPTR+1].INT)ELSE BEGIN CURBOX:=
VPACKAGE(MEM[CURLIST.HEADFIELD].HH.RH,SAVESTACK[SAVEPTR+2].INT,SAVESTACK
[SAVEPTR+1].INT,D);IF C=4 THEN{1045:}BEGIN H:=0;P:=MEM[CURBOX+5].HH.RH;
IF P<>0 THEN IF MEM[P].HH.B0<=2 THEN H:=MEM[P+3].INT;
MEM[CURBOX+2].INT:=MEM[CURBOX+2].INT-H+MEM[CURBOX+3].INT;
MEM[CURBOX+3].INT:=H;END{:1045};END;POPNEST;BOXEND;END;{:1044}{1050:}
PROCEDURE NEWGRAF(INDENTED:BOOLEAN);BEGIN CURLIST.PGFIELD:=0;
IF(CURLIST.MODEFIELD=1)OR(CURLIST.HEADFIELD<>CURLIST.TAILFIELD)THEN
BEGIN MEM[CURLIST.TAILFIELD].HH.RH:=NEWPARAMGLUE(2);
CURLIST.TAILFIELD:=MEM[CURLIST.TAILFIELD].HH.RH;END;PUSHNEST;
CURLIST.MODEFIELD:=99;CURLIST.AUXFIELD:=1000;
IF INDENTED THEN BEGIN CURLIST.TAILFIELD:=NEWNULLBOX;
MEM[CURLIST.HEADFIELD].HH.RH:=CURLIST.TAILFIELD;
MEM[CURLIST.TAILFIELD+1].INT:=EQTB[4277].INT;END;
IF EQTB[2900].HH.RH<>0 THEN BEGINTOKENLI(EQTB[2900].HH.RH,7);
IF NESTPTR=1 THEN BUILDPAGE;END;{:1050}{1052:}PROCEDURE INDENTINHMOD;
BEGIN IF CURCHR>0 THEN BEGIN BEGIN MEM[CURLIST.TAILFIELD].HH.RH:=
NEWNULLBOX;CURLIST.TAILFIELD:=MEM[CURLIST.TAILFIELD].HH.RH;END;
MEM[CURLIST.TAILFIELD+1].INT:=EQTB[4277].INT;END;END;{:1052}{1054:}
PROCEDURE HEADFORVMODE;
BEGIN IF CURLIST.MODEFIELD<0 THEN OFFSAVE ELSE BEGIN BACKINPUT;
CURTOK:=PARTOKEN;BACKINPUT;CURINPUT.INDEXFIELD:=4;END;END;{:1054}{1055:}
PROCEDURE ENDGRAF;
BEGIN IF CURLIST.MODEFIELD=99 THEN BEGIN IF CURLIST.HEADFIELD=CURLIST.
TAILFIELD THEN POPNEST ELSE LINEBREAK(EQTB[3856].INT);NORMALPARAGR;
ERRORCOUNT:=0;END;END;{:1055}{1058:}PROCEDURE BEGININSERTO;
BEGIN IF CURLIST.MODEFIELD<-1 THEN REPORTILLEGA ELSE BEGIN IF CURCMD=38
THEN CURVAL:=255 ELSE BEGIN SCANEIGHTBIT;
IF CURVAL=255 THEN BEGIN PRINTNL(894);BEGIN HELPPTR:=1;HELPLINE[0]:=895;
END;ERROR;CURVAL:=0;END;END;SAVESTACK[SAVEPTR+0].INT:=CURVAL;
SAVEPTR:=SAVEPTR+1;NEWSAVELEVEL(10);SCANLEFTBRAC;NORMALPARAGR;PUSHNEST;
CURLIST.MODEFIELD:=-1;CURLIST.AUXFIELD:=-65536000;END;END;{:1058}{1060:}
PROCEDURE MAKEMARK;VAR P:HALFWORD;
BEGIN IF CURLIST.MODEFIELD<-1 THEN REPORTILLEGA ELSE BEGIN P:=SCANTOKS(
FALSE,TRUE);P:=GETNODE(2);MEM[P].HH.B0:=4;MEM[P].HH.B1:=0;
MEM[P+1].INT:=DEFREF;MEM[CURLIST.TAILFIELD].HH.RH:=P;
CURLIST.TAILFIELD:=P;END;END;{:1060}{1062:}PROCEDURE APPENDPENALT;
BEGIN SCANINT;BEGIN MEM[CURLIST.TAILFIELD].HH.RH:=NEWPENALTY(CURVAL);
CURLIST.TAILFIELD:=MEM[CURLIST.TAILFIELD].HH.RH;END;
IF CURLIST.MODEFIELD=1 THEN BUILDPAGE;END;{:1062}{1064:}
PROCEDURE DELETESKIP;VAR P:HALFWORD;
BEGIN IF(CURLIST.MODEFIELD=1)AND(CURLIST.TAILFIELD=CURLIST.HEADFIELD)
THEN{1065:}BEGIN YOUCANT;BEGIN HELPPTR:=2;HELPLINE[1]:=883;
HELPLINE[0]:=896;END;ERROR;END{:1065}
ELSE BEGIN IF NOT(CURLIST.TAILFIELD>25000)THEN IF MEM[CURLIST.TAILFIELD]
.HH.B0=10 THEN BEGIN P:=CURLIST.HEADFIELD;
WHILE MEM[P].HH.RH<>CURLIST.TAILFIELD DO P:=MEM[P].HH.RH;
MEM[P].HH.RH:=0;FLUSHNODELIS(CURLIST.TAILFIELD);CURLIST.TAILFIELD:=P;
END;END;END;{:1064}{1069:}PROCEDURE UNPACKAGE;LABEL 10;VAR P:HALFWORD;
C:0..1;BEGIN C:=CURCHR;SCANEIGHTBIT;P:=EQTB[2904+CURVAL].HH.RH;
IF P=0 THEN GOTO 10;
IF((ABS(CURLIST.MODEFIELD)=1)AND(MEM[P].HH.B0<>1))OR((ABS(CURLIST.
MODEFIELD)=99)AND(MEM[P].HH.B0<>0))THEN BEGIN PRINTNL(901);
BEGIN HELPPTR:=2;HELPLINE[1]:=902;HELPLINE[0]:=903;END;ERROR;GOTO 10;
END;
IF C=1 THEN MEM[CURLIST.TAILFIELD].HH.RH:=COPYNODELIST(MEM[P+5].HH.RH)
ELSE BEGIN MEM[CURLIST.TAILFIELD].HH.RH:=MEM[P+5].HH.RH;
EQTB[2904+CURVAL].HH.RH:=0;FREENODE(P,7);END;
WHILE MEM[CURLIST.TAILFIELD].HH.RH<>0 DO CURLIST.TAILFIELD:=MEM[CURLIST.
TAILFIELD].HH.RH;10:END;{:1069}{1072:}PROCEDURE APPENDITALIC;
VAR F:INTERNALFONT;
BEGIN IF(CURLIST.TAILFIELD>25000)AND(CURLIST.TAILFIELD<>CURLIST.
HEADFIELD)THEN BEGIN F:=MEM[CURLIST.TAILFIELD].HH.B0;
BEGIN MEM[CURLIST.TAILFIELD].HH.RH:=NEWKERN(FONTINFO[ITALICBASE[F]+
FONTINFO[CHARBASE[F]+MEM[CURLIST.TAILFIELD].HH.B1].QQQQ.B2 DIV 4].INT);
CURLIST.TAILFIELD:=MEM[CURLIST.TAILFIELD].HH.RH;END;END;END;{:1072}
{1076:}PROCEDURE APPENDDISCRE;
BEGIN BEGIN MEM[CURLIST.TAILFIELD].HH.RH:=NEWDISC;
CURLIST.TAILFIELD:=MEM[CURLIST.TAILFIELD].HH.RH;END;
IF CURCHR=1 THEN MEM[CURLIST.TAILFIELD+1].HH.LH:=NEWCHARACTER(EQTB[3160]
.HH.RH,45)ELSE BEGIN SAVEPTR:=SAVEPTR+1;SAVESTACK[SAVEPTR-1].INT:=0;
SCANLEFTBRAC;NEWSAVELEVEL(9);PUSHNEST;CURLIST.MODEFIELD:=-99;
CURLIST.AUXFIELD:=1000;END;END;{:1076}{1078:}PROCEDURE BUILDDISCRET;
LABEL 30,10;VAR P,Q:HALFWORD;N:INTEGER;BEGIN UNSAVE;{1080:}
Q:=CURLIST.HEADFIELD;P:=MEM[Q].HH.RH;N:=0;
WHILE P<>0 DO BEGIN IF NOT(P>25000)THEN IF(MEM[P].HH.B0<>11)AND(MEM[P].
HH.B0<>6)THEN BEGIN PRINTNL(910);BEGIN HELPPTR:=1;HELPLINE[0]:=911;END;
ERROR;BEGINDIAGNOS;PRINTNL(912);SHOWBOX(P);ENDDIAGNOSTI(TRUE);
FLUSHNODELIS(P);MEM[Q].HH.RH:=0;GOTO 30;END;Q:=P;P:=MEM[Q].HH.RH;N:=N+1;
END;30:{:1080};P:=MEM[CURLIST.HEADFIELD].HH.RH;POPNEST;
CASE SAVESTACK[SAVEPTR-1].INT OF 0:MEM[CURLIST.TAILFIELD+1].HH.LH:=P;
1:MEM[CURLIST.TAILFIELD+1].HH.RH:=P;2:{1079:}
BEGIN IF(N>0)AND(ABS(CURLIST.MODEFIELD)=197)THEN BEGIN PRINTNL(904);
BEGIN HELPPTR:=2;HELPLINE[1]:=905;HELPLINE[0]:=906;END;FLUSHNODELIS(P);
N:=0;ERROR;END ELSE MEM[CURLIST.TAILFIELD].HH.RH:=P;
IF N<128 THEN MEM[CURLIST.TAILFIELD].HH.B1:=N ELSE BEGIN PRINTNL(907);
BEGIN HELPPTR:=2;HELPLINE[1]:=908;HELPLINE[0]:=909;END;ERROR;END;
IF N>0 THEN CURLIST.TAILFIELD:=Q;SAVEPTR:=SAVEPTR-1;GOTO 10;END{:1079};
END;SAVESTACK[SAVEPTR-1].INT:=SAVESTACK[SAVEPTR-1].INT+1;SCANLEFTBRAC;
NEWSAVELEVEL(9);PUSHNEST;CURLIST.MODEFIELD:=-99;CURLIST.AUXFIELD:=1000;
10:END;{:1078}{1082:}PROCEDURE INSTHE;BEGIN PRINTNL(913);
BEGIN HELPPTR:=3;HELPLINE[2]:=914;HELPLINE[1]:=915;HELPLINE[0]:=916;END;
BACKERROR;MEM[25012].HH.RH:=THETOKS(FALSE);
BEGINTOKENLI(MEM[25003].HH.RH,4);END;{:1082}{1085:}PROCEDURE MAKEACCENT;
VAR S,T:REAL;P,Q:HALFWORD;F:INTERNALFONT;A,H,X,W,DELTA:SCALED;
I:FOURQUARTERS;BEGIN SCANCHARNUM;F:=EQTB[3160].HH.RH;
P:=NEWCHARACTER(F,CURVAL);
IF P<>0 THEN BEGIN X:=FONTINFO[5+PARAMBASE[F]].INT;
S:=FONTINFO[1+PARAMBASE[F]].INT/65536.0;
A:=FONTINFO[WIDTHBASE[F]+FONTINFO[CHARBASE[F]+MEM[P].HH.B1].QQQQ.B0].INT
;DOASSIGNMENT;{1086:}Q:=0;F:=EQTB[3160].HH.RH;
IF(CURCMD=11)OR(CURCMD=12)THEN Q:=NEWCHARACTER(F,CURCHR)ELSE IF CURCMD=
16 THEN BEGIN SCANCHARNUM;Q:=NEWCHARACTER(F,CURVAL);
END ELSE BACKINPUT{:1086};IF Q<>0 THEN{1087:}
BEGIN T:=FONTINFO[1+PARAMBASE[F]].INT/65536.0;
I:=FONTINFO[CHARBASE[F]+MEM[Q].HH.B1].QQQQ;
W:=FONTINFO[WIDTHBASE[F]+I.B0].INT;
H:=FONTINFO[HEIGHTBASE[F]+I.B1 DIV 16].INT;
IF H<>X THEN BEGIN P:=HPACK(P,0,1);MEM[P+4].INT:=X-H;END;
DELTA:=ROUND((W-A)/2+H*T-X*S);
MEM[CURLIST.TAILFIELD].HH.RH:=NEWKERN(DELTA);
MEM[MEM[CURLIST.TAILFIELD].HH.RH].HH.RH:=P;
MEM[P].HH.RH:=NEWKERN(-A-DELTA);CURLIST.TAILFIELD:=MEM[P].HH.RH;P:=Q;
END{:1087};MEM[CURLIST.TAILFIELD].HH.RH:=P;CURLIST.TAILFIELD:=P;END;END;
{:1085}{1089:}PROCEDURE ALIGNERROR;
BEGIN IF ABS(ALIGNSTATE)>2 THEN{1090:}BEGIN PRINTNL(921);
IF CURTOK=1062 THEN BEGIN BEGIN HELPPTR:=6;HELPLINE[5]:=922;
HELPLINE[4]:=923;HELPLINE[3]:=924;HELPLINE[2]:=925;HELPLINE[1]:=926;
HELPLINE[0]:=927;END;END ELSE BEGIN BEGIN HELPPTR:=5;HELPLINE[4]:=922;
HELPLINE[3]:=928;HELPLINE[2]:=925;HELPLINE[1]:=926;HELPLINE[0]:=927;END;
END;ERROR;END{:1090}ELSE BEGIN BACKINPUT;
IF ALIGNSTATE<0 THEN BEGIN PRINTNL(479);ALIGNSTATE:=ALIGNSTATE+1;
CURTOK:=379;END ELSE BEGIN PRINTNL(917);ALIGNSTATE:=ALIGNSTATE-1;
CURTOK:=637;END;BEGIN HELPPTR:=3;HELPLINE[2]:=918;HELPLINE[1]:=919;
HELPLINE[0]:=920;END;INSERROR;END;END;{:1089}{1091:}
PROCEDURE NOALIGNERROR;BEGIN PRINTNL(929);BEGIN HELPPTR:=2;
HELPLINE[1]:=930;HELPLINE[0]:=931;END;ERROR;END;PROCEDURE OMITERROR;
BEGIN PRINTNL(932);BEGIN HELPPTR:=2;HELPLINE[1]:=933;HELPLINE[0]:=931;
END;ERROR;END;{:1091}{1094:}PROCEDURE DOENDV;
BEGIN IF CURGROUP=5 THEN BEGIN ENDGRAF;IF FINCOL THEN FINROW;
END ELSE OFFSAVE;END;{:1094}{1098:}PROCEDURE CSERROR;BEGIN PRINTNL(936);
BEGIN HELPPTR:=1;HELPLINE[0]:=937;END;ERROR;END;{:1098}{1099:}
PROCEDURE PUSHMATH(C:GROUPCODE);BEGIN PUSHNEST;CURLIST.MODEFIELD:=-197;
CURLIST.AUXFIELD:=0;NEWSAVELEVEL(C);END;{:1099}{1101:}
PROCEDURE INITMATH;LABEL 21,40,45,30;VAR W:SCALED;L:SCALED;S:SCALED;
P:HALFWORD;Q:HALFWORD;F:INTERNALFONT;N:INTEGER;V:SCALED;D:SCALED;
BEGIN GETTOKEN;IF(CURCMD=3)AND(CURLIST.MODEFIELD>0)THEN{1108:}
BEGIN IF CURLIST.HEADFIELD=CURLIST.TAILFIELD THEN BEGIN POPNEST;
W:=-1073741823;END ELSE BEGIN LINEBREAK(EQTB[3857].INT);{1109:}
V:=MEM[JUSTBOX+4].INT+2*FONTINFO[6+PARAMBASE[EQTB[3160].HH.RH]].INT;
W:=-1073741823;P:=MEM[JUSTBOX+5].HH.RH;WHILE P<>0 DO BEGIN{1110:}
21:IF(P>25000)THEN BEGIN F:=MEM[P].HH.B0;
D:=FONTINFO[WIDTHBASE[F]+FONTINFO[CHARBASE[F]+MEM[P].HH.B1].QQQQ.B0].INT
;GOTO 40;END;CASE MEM[P].HH.B0 OF 0,1,2:BEGIN D:=MEM[P+1].INT;GOTO 40;
END;6:{621:}BEGIN MEM[25012]:=MEM[P+1];MEM[25012].HH.RH:=MEM[P].HH.RH;
P:=25012;GOTO 21;END{:621};11,9:D:=MEM[P+1].INT;10:{1111:}
BEGIN Q:=MEM[P+1].HH.LH;D:=MEM[Q+1].INT;
IF MEM[JUSTBOX+5].HH.B0=1 THEN BEGIN IF(MEM[JUSTBOX+5].HH.B1=MEM[Q].HH.
B0)AND(MEM[Q+2].INT<>0)THEN V:=1073741823;
END ELSE IF MEM[JUSTBOX+5].HH.B0=2 THEN BEGIN IF(MEM[JUSTBOX+5].HH.B1=
MEM[Q].HH.B1)AND(MEM[Q+3].INT<>0)THEN V:=1073741823;END;
IF MEM[P].HH.B1>=100 THEN GOTO 40;END{:1111};8:{1312:}D:=0{:1312};
OTHERS:D:=0 END{:1110};IF V<1073741823 THEN V:=V+D;GOTO 45;
40:IF V<1073741823 THEN BEGIN V:=V+D;W:=V;END ELSE BEGIN W:=1073741823;
GOTO 30;END;45:P:=MEM[P].HH.RH;END;30:{:1109};END;{1112:}
IF EQTB[2898].HH.RH=0 THEN IF(EQTB[4295].INT<>0)AND(((EQTB[3890].INT>=0)
AND(CURLIST.PGFIELD+2>EQTB[3890].INT))OR(CURLIST.PGFIELD+1<-EQTB[3890].
INT))THEN BEGIN L:=EQTB[4281].INT-ABS(EQTB[4295].INT);
IF EQTB[4295].INT>0 THEN S:=EQTB[4295].INT ELSE S:=0;
END ELSE BEGIN L:=EQTB[4281].INT;S:=0;
END ELSE BEGIN N:=MEM[EQTB[2898].HH.RH].HH.LH;
IF CURLIST.PGFIELD+2>=N THEN P:=EQTB[2898].HH.RH+2*N ELSE P:=EQTB[2898].
HH.RH+2*(CURLIST.PGFIELD+2);S:=MEM[P-1].INT;L:=MEM[P].INT;END{:1112};
PUSHMATH(14);CURLIST.MODEFIELD:=197;EQDEFINE(3209,114,1);
EQWORDDEFINE(4291,W);EQWORDDEFINE(4292,L);EQWORDDEFINE(4293,S);
IF NESTPTR=1 THEN BUILDPAGE;
IF EQTB[2902].HH.RH<>0 THEN BEGINTOKENLI(EQTB[2902].HH.RH,9);END{:1108}
ELSE BEGIN BACKINPUT;{1102:}BEGIN PUSHMATH(14);EQDEFINE(3209,114,1);
IF EQTB[2901].HH.RH<>0 THEN BEGINTOKENLI(EQTB[2901].HH.RH,8);END{:1102};
END;END;{:1101}{1105:}PROCEDURE STARTEQNO;
BEGIN IF CURGROUP=14 THEN BEGIN SAVESTACK[SAVEPTR+0].INT:=CURCHR;
SAVEPTR:=SAVEPTR+1;{1102:}BEGIN PUSHMATH(14);EQDEFINE(3209,114,1);
IF EQTB[2901].HH.RH<>0 THEN BEGINTOKENLI(EQTB[2901].HH.RH,8);END{:1102};
END ELSE OFFSAVE;END;{:1105}{1114:}PROCEDURE SCANMATH(P:HALFWORD);
LABEL 20,10;VAR C:INTEGER;BEGIN 20:{384:}REPEAT GETXTOKEN;
UNTIL CURCMD<>10{:384};
CASE CURCMD OF 11,12,65:IF CURCHR<128 THEN C:=EQTB[3338+CURCHR].HH.RH
ELSE C:=CURCHR;16:BEGIN SCANCHARNUM;
IF CURVAL<128 THEN C:=EQTB[3338+CURVAL].HH.RH ELSE C:=CURVAL;END;
17:BEGIN SCANFIFTEENB;C:=CURVAL;END;66:C:=CURCHR;15:BEGIN SCANTWENTYSE;
C:=CURVAL DIV 4096;END;OTHERS:{1115:}BEGIN BACKINPUT;SCANLEFTBRAC;
SAVESTACK[SAVEPTR+0].INT:=P;SAVEPTR:=SAVEPTR+1;PUSHMATH(8);GOTO 10;
END{:1115}END;MEM[P].HH.RH:=1;MEM[P].HH.B1:=C MOD 256;
MEM[P].HH.B0:=(C DIV 256)MOD 16;
IF C>=28672 THEN IF MEM[P].HH.B0<8 THEN MEM[P].HH.B0:=EQTB[3209].HH.RH
ELSE BEGIN{1118:}BEGIN CSPTR:=(C MOD 128)+129;CURCMD:=EQTB[CSPTR].HH.B0;
CURCHR:=EQTB[CSPTR].HH.RH;XTOKEN;BACKINPUT;END{:1118};GOTO 20;END;
10:END;{:1114}{1117:}PROCEDURE SETMATHCHAR(C:INTEGER);VAR P:HALFWORD;
BEGIN IF C>=30720 THEN{1118:}BEGIN CSPTR:=(C MOD 128)+129;
CURCMD:=EQTB[CSPTR].HH.B0;CURCHR:=EQTB[CSPTR].HH.RH;XTOKEN;BACKINPUT;
END{:1118}ELSE BEGIN P:=NEWNOAD;MEM[P+1].HH.RH:=1;
MEM[P+1].HH.B1:=C MOD 256;
IF C>=28672 THEN BEGIN MEM[P+1].HH.B0:=EQTB[3209].HH.RH;
MEM[P].HH.B0:=16+((C-28672)DIV 256);
END ELSE BEGIN MEM[P+1].HH.B0:=(C DIV 256)MOD 16;
MEM[P].HH.B0:=16+(C DIV 4096);END;MEM[CURLIST.TAILFIELD].HH.RH:=P;
CURLIST.TAILFIELD:=P;END;END;{:1117}{1122:}PROCEDURE MATHLIMITSWI;
LABEL 10;
BEGIN IF CURLIST.HEADFIELD<>CURLIST.TAILFIELD THEN IF MEM[CURLIST.
TAILFIELD].HH.B0=17 THEN BEGIN MEM[CURLIST.TAILFIELD].HH.B1:=CURCHR;
GOTO 10;END;PRINTNL(941);BEGIN HELPPTR:=1;HELPLINE[0]:=942;END;ERROR;
10:END;{:1122}{1123:}PROCEDURE SCANDELIMITE(P:HALFWORD;R:BOOLEAN);
BEGIN IF R THEN SCANTWENTYSE ELSE BEGIN{384:}REPEAT GETXTOKEN;
UNTIL CURCMD<>10{:384};
CASE CURCMD OF 11,12:CURVAL:=EQTB[4149+CURCHR].INT;15:SCANTWENTYSE;
OTHERS:CURVAL:=-1 END;END;IF CURVAL<0 THEN{1124:}BEGIN PRINTNL(943);
BEGIN HELPPTR:=6;HELPLINE[5]:=944;HELPLINE[4]:=945;HELPLINE[3]:=946;
HELPLINE[2]:=947;HELPLINE[1]:=948;HELPLINE[0]:=949;END;BACKERROR;
CURVAL:=0;END{:1124};MEM[P].QQQQ.B0:=(CURVAL DIV 1048576)MOD 16;
MEM[P].QQQQ.B1:=(CURVAL DIV 4096)MOD 256;
MEM[P].QQQQ.B2:=(CURVAL DIV 256)MOD 16;MEM[P].QQQQ.B3:=CURVAL MOD 256;
END;{:1123}{1126:}PROCEDURE MATHRADICAL;
BEGIN BEGIN MEM[CURLIST.TAILFIELD].HH.RH:=GETNODE(5);
CURLIST.TAILFIELD:=MEM[CURLIST.TAILFIELD].HH.RH;END;
MEM[CURLIST.TAILFIELD].HH.B0:=24;MEM[CURLIST.TAILFIELD].HH.B1:=0;
MEM[CURLIST.TAILFIELD+1].HH:=EMPTYFIELD;
MEM[CURLIST.TAILFIELD+3].HH:=EMPTYFIELD;
MEM[CURLIST.TAILFIELD+2].HH:=EMPTYFIELD;
SCANDELIMITE(CURLIST.TAILFIELD+4,TRUE);SCANMATH(CURLIST.TAILFIELD+1);
END;{:1126}{1128:}PROCEDURE MATHAC;
BEGIN BEGIN MEM[CURLIST.TAILFIELD].HH.RH:=GETNODE(5);
CURLIST.TAILFIELD:=MEM[CURLIST.TAILFIELD].HH.RH;END;
MEM[CURLIST.TAILFIELD].HH.B0:=28;MEM[CURLIST.TAILFIELD].HH.B1:=0;
MEM[CURLIST.TAILFIELD+1].HH:=EMPTYFIELD;
MEM[CURLIST.TAILFIELD+3].HH:=EMPTYFIELD;
MEM[CURLIST.TAILFIELD+2].HH:=EMPTYFIELD;
MEM[CURLIST.TAILFIELD+4].HH.RH:=1;SCANFIFTEENB;
MEM[CURLIST.TAILFIELD+4].HH.B1:=CURVAL MOD 256;
IF CURVAL>=28672 THEN MEM[CURLIST.TAILFIELD+4].HH.B0:=EQTB[3209].HH.RH
ELSE MEM[CURLIST.TAILFIELD+4].HH.B0:=(CURVAL DIV 256)MOD 16;
SCANMATH(CURLIST.TAILFIELD+1);END;{:1128}{1134:}PROCEDURE APPENDCHOICE;
BEGIN BEGIN MEM[CURLIST.TAILFIELD].HH.RH:=NEWCHOICE;
CURLIST.TAILFIELD:=MEM[CURLIST.TAILFIELD].HH.RH;END;SAVEPTR:=SAVEPTR+1;
SAVESTACK[SAVEPTR-1].INT:=0;SCANLEFTBRAC;PUSHMATH(12);END;{:1134}{1136:}
{1146:}FUNCTION FINMLIST(P:HALFWORD):HALFWORD;VAR Q:HALFWORD;
BEGIN IF CURLIST.AUXFIELD<>0 THEN{1147:}
BEGIN MEM[CURLIST.AUXFIELD+3].HH.RH:=3;
MEM[CURLIST.AUXFIELD+3].HH.LH:=MEM[CURLIST.HEADFIELD].HH.RH;
IF P=0 THEN Q:=CURLIST.AUXFIELD ELSE BEGIN Q:=MEM[CURLIST.AUXFIELD+2].HH
.LH;IF MEM[Q].HH.B0<>30 THEN CONFUSION(696);
MEM[CURLIST.AUXFIELD+2].HH.LH:=MEM[Q].HH.RH;
MEM[Q].HH.RH:=CURLIST.AUXFIELD;MEM[CURLIST.AUXFIELD].HH.RH:=P;END;
END{:1147}ELSE BEGIN MEM[CURLIST.TAILFIELD].HH.RH:=P;
Q:=MEM[CURLIST.HEADFIELD].HH.RH;END;POPNEST;FINMLIST:=Q;END;{:1146}
PROCEDURE BUILDCHOICES;LABEL 10;VAR P:HALFWORD;BEGIN UNSAVE;
P:=FINMLIST(0);
CASE SAVESTACK[SAVEPTR-1].INT OF 0:MEM[CURLIST.TAILFIELD+1].HH.LH:=P;
1:MEM[CURLIST.TAILFIELD+1].HH.RH:=P;2:MEM[CURLIST.TAILFIELD+2].HH.LH:=P;
3:BEGIN MEM[CURLIST.TAILFIELD+2].HH.RH:=P;SAVEPTR:=SAVEPTR-1;GOTO 10;
END;END;SAVESTACK[SAVEPTR-1].INT:=SAVESTACK[SAVEPTR-1].INT+1;
SCANLEFTBRAC;PUSHMATH(12);10:END;{:1136}{1138:}PROCEDURE SUBSUP;
VAR T:SMALLNUMBER;P:HALFWORD;BEGIN T:=0;P:=0;
IF CURLIST.TAILFIELD<>CURLIST.HEADFIELD THEN IF(MEM[CURLIST.TAILFIELD].
HH.B0>=16)AND(MEM[CURLIST.TAILFIELD].HH.B0<30)THEN BEGIN P:=CURLIST.
TAILFIELD+2+CURCMD-7;T:=MEM[P].HH.RH;END;IF(P=0)OR(T<>0)THEN{1139:}
BEGIN BEGIN MEM[CURLIST.TAILFIELD].HH.RH:=NEWNOAD;
CURLIST.TAILFIELD:=MEM[CURLIST.TAILFIELD].HH.RH;END;
P:=CURLIST.TAILFIELD+2+CURCMD-7;
IF T<>0 THEN BEGIN IF CURCMD=7 THEN BEGIN PRINTNL(950);BEGIN HELPPTR:=1;
HELPLINE[0]:=951;END;END ELSE BEGIN PRINTNL(952);BEGIN HELPPTR:=1;
HELPLINE[0]:=953;END;END;ERROR;END;END{:1139};SCANMATH(P);END;{:1138}
{1143:}PROCEDURE MATHFRACTION;VAR C:SMALLNUMBER;BEGIN C:=CURCHR;
IF CURLIST.AUXFIELD<>0 THEN{1145:}
BEGIN IF C MOD 3=0 THEN SCANDIMEN(FALSE,FALSE,FALSE);
IF C>=3 THEN BEGIN SCANDELIMITE(25012,FALSE);SCANDELIMITE(25012,FALSE);
END;PRINTNL(960);BEGIN HELPPTR:=3;HELPLINE[2]:=961;HELPLINE[1]:=962;
HELPLINE[0]:=963;END;ERROR;END{:1145}
ELSE BEGIN CURLIST.AUXFIELD:=GETNODE(6);MEM[CURLIST.AUXFIELD].HH.B0:=25;
MEM[CURLIST.AUXFIELD].HH.B1:=0;MEM[CURLIST.AUXFIELD+2].HH.RH:=3;
MEM[CURLIST.AUXFIELD+2].HH.LH:=MEM[CURLIST.HEADFIELD].HH.RH;
MEM[CURLIST.AUXFIELD+3].HH:=EMPTYFIELD;
MEM[CURLIST.AUXFIELD+4].QQQQ:=NULLDELIMITE;
MEM[CURLIST.AUXFIELD+5].QQQQ:=NULLDELIMITE;
MEM[CURLIST.HEADFIELD].HH.RH:=0;CURLIST.TAILFIELD:=CURLIST.HEADFIELD;
{1144:}CASE C MOD 3 OF 0:BEGIN SCANDIMEN(FALSE,FALSE,FALSE);
MEM[CURLIST.AUXFIELD+1].INT:=CURVAL;END;
1:MEM[CURLIST.AUXFIELD+1].INT:=1073741824;
2:MEM[CURLIST.AUXFIELD+1].INT:=0;END;
IF C>=3 THEN BEGIN SCANDELIMITE(CURLIST.AUXFIELD+4,FALSE);
SCANDELIMITE(CURLIST.AUXFIELD+5,FALSE);END{:1144};END;END;{:1143}{1152:}
PROCEDURE MATHLEFTRIGH;VAR T:SMALLNUMBER;P:HALFWORD;BEGIN T:=CURCHR;
IF(T=31)AND(CURGROUP<>15)THEN{1153:}
BEGIN IF CURGROUP=14 THEN BEGIN SCANDELIMITE(25012,FALSE);PRINTNL(964);
BEGIN HELPPTR:=1;HELPLINE[0]:=965;END;ERROR;END ELSE OFFSAVE;END{:1153}
ELSE BEGIN P:=NEWNOAD;MEM[P].HH.B0:=T;SCANDELIMITE(P+1,FALSE);
IF T=30 THEN BEGIN PUSHMATH(15);MEM[CURLIST.HEADFIELD].HH.RH:=P;
CURLIST.TAILFIELD:=P;END ELSE BEGIN P:=FINMLIST(P);UNSAVE;
BEGIN MEM[CURLIST.TAILFIELD].HH.RH:=NEWNOAD;
CURLIST.TAILFIELD:=MEM[CURLIST.TAILFIELD].HH.RH;END;
MEM[CURLIST.TAILFIELD].HH.B0:=23;MEM[CURLIST.TAILFIELD+1].HH.RH:=3;
MEM[CURLIST.TAILFIELD+1].HH.LH:=P;END;END;END;{:1152}{1155:}
PROCEDURE FINMATH;VAR L:BOOLEAN;DANGER:BOOLEAN;M:INTEGER;P:HALFWORD;
A:HALFWORD;{1159:}B:HALFWORD;W:SCALED;Z:SCALED;E:SCALED;Q:SCALED;
D:SCALED;S:SCALED;G1,G2:SMALLNUMBER;R:HALFWORD;{:1159}
BEGIN DANGER:=FALSE;{1156:}
IF(FONTPARAMS[EQTB[3163].HH.RH]<22)OR(FONTPARAMS[EQTB[3179].HH.RH]<22)OR
(FONTPARAMS[EQTB[3195].HH.RH]<22)THEN BEGIN PRINTNL(966);
BEGIN HELPPTR:=3;HELPLINE[2]:=967;HELPLINE[1]:=968;HELPLINE[0]:=969;END;
ERROR;FLUSHMATH;DANGER:=TRUE;
END ELSE IF(FONTPARAMS[EQTB[3164].HH.RH]<13)OR(FONTPARAMS[EQTB[3180].HH.
RH]<13)OR(FONTPARAMS[EQTB[3196].HH.RH]<13)THEN BEGIN PRINTNL(970);
BEGIN HELPPTR:=3;HELPLINE[2]:=971;HELPLINE[1]:=972;HELPLINE[0]:=973;END;
ERROR;FLUSHMATH;DANGER:=TRUE;END{:1156};M:=CURLIST.MODEFIELD;L:=FALSE;
P:=FINMLIST(0);IF CURLIST.MODEFIELD=-M THEN BEGIN CURMLIST:=P;
CURSTYLE:=2;MLISTPENALTI:=FALSE;MLISTTOHLIST;
A:=HPACK(MEM[25003].HH.RH,0,1);UNSAVE;SAVEPTR:=SAVEPTR-1;
IF SAVESTACK[SAVEPTR+0].INT=1 THEN L:=TRUE;IF DANGER THEN FLUSHMATH;
M:=CURLIST.MODEFIELD;P:=FINMLIST(0);END ELSE A:=0;IF M<0 THEN{1157:}
BEGIN BEGIN MEM[CURLIST.TAILFIELD].HH.RH:=NEWMATH(EQTB[4278].INT,0);
CURLIST.TAILFIELD:=MEM[CURLIST.TAILFIELD].HH.RH;END;CURMLIST:=P;
CURSTYLE:=2;MLISTPENALTI:=(CURLIST.MODEFIELD>0);MLISTTOHLIST;
MEM[CURLIST.TAILFIELD].HH.RH:=MEM[25003].HH.RH;
WHILE MEM[CURLIST.TAILFIELD].HH.RH<>0 DO CURLIST.TAILFIELD:=MEM[CURLIST.
TAILFIELD].HH.RH;
BEGIN MEM[CURLIST.TAILFIELD].HH.RH:=NEWMATH(EQTB[4278].INT,1);
CURLIST.TAILFIELD:=MEM[CURLIST.TAILFIELD].HH.RH;END;
CURLIST.AUXFIELD:=1000;UNSAVE;END{:1157}ELSE BEGIN{1158:}
BEGIN GETXTOKEN;IF CURCMD<>3 THEN BEGIN PRINTNL(974);BEGIN HELPPTR:=2;
HELPLINE[1]:=975;HELPLINE[0]:=976;END;BACKERROR;END;END{:1158};{1160:}
CURMLIST:=P;CURSTYLE:=0;MLISTPENALTI:=FALSE;MLISTTOHLIST;
P:=MEM[25003].HH.RH;B:=HPACK(P,0,1);W:=MEM[B+1].INT;Z:=EQTB[4292].INT;
S:=EQTB[4293].INT;IF A=0 THEN BEGIN E:=0;Q:=0;
END ELSE BEGIN E:=MEM[A+1].INT;
Q:=E+FONTINFO[6+PARAMBASE[EQTB[3163].HH.RH]].INT;END;
IF W+Q>Z THEN{1162:}
BEGIN IF(E<>0)AND((W-TOTALSHRINK[0]+Q<=Z)OR(TOTALSHRINK[1]<>0)OR(
TOTALSHRINK[2]<>0)OR(TOTALSHRINK[3]<>0))THEN BEGIN FREENODE(B,7);
B:=HPACK(P,Z-Q,0);END ELSE BEGIN E:=0;IF W>Z THEN BEGIN FREENODE(B,7);
B:=HPACK(P,Z,0);END;END;W:=MEM[B+1].INT;END{:1162};{1163:}D:=HALF(Z-W);
IF(E>0)AND(D<2*E)THEN BEGIN D:=HALF(Z-W-E);
IF P<>0 THEN IF MEM[P].HH.B0=10 THEN D:=0;END{:1163};{1164:}
BEGIN MEM[CURLIST.TAILFIELD].HH.RH:=NEWPENALTY(EQTB[3861].INT);
CURLIST.TAILFIELD:=MEM[CURLIST.TAILFIELD].HH.RH;END;
IF(D+S<=EQTB[4291].INT)OR L THEN BEGIN G1:=3;G2:=3;END ELSE BEGIN G1:=4;
G2:=5;END;IF L AND(E=0)THEN BEGIN MEM[A+4].INT:=S;APPENDTOVLIS(A);
BEGIN MEM[CURLIST.TAILFIELD].HH.RH:=NEWPENALTY(10000);
CURLIST.TAILFIELD:=MEM[CURLIST.TAILFIELD].HH.RH;END;
END ELSE BEGIN MEM[CURLIST.TAILFIELD].HH.RH:=NEWPARAMGLUE(G1);
CURLIST.TAILFIELD:=MEM[CURLIST.TAILFIELD].HH.RH;END{:1164};{1165:}
IF E<>0 THEN BEGIN R:=NEWKERN(Z-W-E-D);IF L THEN BEGIN MEM[A].HH.RH:=R;
MEM[R].HH.RH:=B;B:=A;D:=0;END ELSE BEGIN MEM[B].HH.RH:=R;
MEM[R].HH.RH:=A;END;B:=HPACK(B,0,1);END;MEM[B+4].INT:=S+D;
APPENDTOVLIS(B){:1165};{1166:}
IF(A<>0)AND(E=0)AND NOT L THEN BEGIN BEGIN MEM[CURLIST.TAILFIELD].HH.RH
:=NEWPENALTY(10000);CURLIST.TAILFIELD:=MEM[CURLIST.TAILFIELD].HH.RH;END;
MEM[A+4].INT:=S+Z-MEM[A+1].INT;APPENDTOVLIS(A);
BEGIN MEM[CURLIST.TAILFIELD].HH.RH:=NEWPENALTY(EQTB[3862].INT);
CURLIST.TAILFIELD:=MEM[CURLIST.TAILFIELD].HH.RH;END;
END ELSE BEGIN BEGIN MEM[CURLIST.TAILFIELD].HH.RH:=NEWPENALTY(EQTB[3862]
.INT);CURLIST.TAILFIELD:=MEM[CURLIST.TAILFIELD].HH.RH;END;
BEGIN MEM[CURLIST.TAILFIELD].HH.RH:=NEWPARAMGLUE(G2);
CURLIST.TAILFIELD:=MEM[CURLIST.TAILFIELD].HH.RH;END;END{:1166};
RESUMEAFTERD{:1160};END;END;{:1155}{1161:}PROCEDURE RESUMEAFTERD;
BEGIN IF CURGROUP<>14 THEN CONFUSION(977);UNSAVE;
CURLIST.PGFIELD:=CURLIST.PGFIELD+3;PUSHNEST;CURLIST.MODEFIELD:=99;
CURLIST.AUXFIELD:=1000;{421:}BEGIN GETTOKEN;
IF CURCMD<>10 THEN BACKINPUT;END{:421};IF NESTPTR=1 THEN BUILDPAGE;END;
{:1161}{1172:}{1176:}PROCEDURE GETRTOKEN;LABEL 20;BEGIN 20:GETTOKEN;
IF(CSPTR=0)OR(CSPTR>2358)THEN BEGIN PRINTNL(991);BEGIN HELPPTR:=5;
HELPLINE[4]:=992;HELPLINE[3]:=993;HELPLINE[2]:=994;HELPLINE[1]:=995;
HELPLINE[0]:=996;END;IF CSPTR=0 THEN BACKINPUT;CURTOK:=6454;INSERROR;
GOTO 20;END;END;{:1176}{1196:}PROCEDURE DOREGISTERCO(A:SMALLNUMBER);
LABEL 10;VAR P,Q,R,S:HALFWORD;N:EIGHTBITS;BEGIN P:=CURCHR;Q:=CURCMD;
SCANEIGHTBIT;N:=CURVAL;IF Q=91 THEN SCANOPTIONAL ELSE{1197:}
IF NOT SCANKEYWORD(1033)THEN BEGIN PRINTNL(1034);BEGIN HELPPTR:=2;
HELPLINE[1]:=1035;HELPLINE[0]:=1036;END;ERROR;GOTO 10;END{:1197};
ARITHERROR:=FALSE;IF Q<93 THEN{1198:}CASE P OF 0:BEGIN SCANINT;
IF Q=92 THEN CURVAL:=CURVAL+EQTB[3893+N].INT;END;
1:BEGIN SCANDIMEN(FALSE,FALSE,FALSE);
IF Q=92 THEN CURVAL:=CURVAL+EQTB[4296+N].INT;END;
OTHERS:BEGIN SCANGLUE(P);IF Q=92 THEN{1199:}BEGIN Q:=NEWSPEC(CURVAL);
IF P=2 THEN R:=EQTB[2386+N].HH.RH ELSE R:=EQTB[2642+N].HH.RH;
DELETEGLUERE(CURVAL);MEM[Q+1].INT:=MEM[Q+1].INT+MEM[R+1].INT;
IF MEM[Q+2].INT=0 THEN MEM[Q].HH.B0:=0;
IF MEM[Q].HH.B0=MEM[R].HH.B0 THEN MEM[Q+2].INT:=MEM[Q+2].INT+MEM[R+2].
INT ELSE IF(MEM[Q].HH.B0<MEM[R].HH.B0)AND(MEM[R+2].INT<>0)THEN BEGIN MEM
[Q+2].INT:=MEM[R+2].INT;MEM[Q].HH.B0:=MEM[R].HH.B0;END;
IF MEM[Q+3].INT=0 THEN MEM[Q].HH.B1:=0;
IF MEM[Q].HH.B1=MEM[R].HH.B1 THEN MEM[Q+3].INT:=MEM[Q+3].INT+MEM[R+3].
INT ELSE IF(MEM[Q].HH.B1<MEM[R].HH.B1)AND(MEM[R+3].INT<>0)THEN BEGIN MEM
[Q+3].INT:=MEM[R+3].INT;MEM[Q].HH.B1:=MEM[R].HH.B1;END;CURVAL:=Q;
END{:1199};END END{:1198}ELSE{1200:}BEGIN SCANINT;
CASE P OF 0:IF Q=93 THEN CURVAL:=NXPLUSY(EQTB[3893+N].INT,CURVAL,0)ELSE
CURVAL:=XOVERN(EQTB[3893+N].INT,CURVAL);
1:IF Q=93 THEN CURVAL:=NXPLUSY(EQTB[4296+N].INT,CURVAL,0)ELSE CURVAL:=
XOVERN(EQTB[4296+N].INT,CURVAL);
OTHERS:BEGIN IF P=2 THEN S:=EQTB[2386+N].HH.RH ELSE S:=EQTB[2642+N].HH.
RH;R:=NEWSPEC(S);
IF Q=93 THEN BEGIN MEM[R+1].INT:=NXPLUSY(MEM[S+1].INT,CURVAL,0);
MEM[R+2].INT:=NXPLUSY(MEM[S+2].INT,CURVAL,0);
MEM[R+3].INT:=NXPLUSY(MEM[S+3].INT,CURVAL,0);
END ELSE BEGIN MEM[R+1].INT:=XOVERN(MEM[S+1].INT,CURVAL);
MEM[R+2].INT:=XOVERN(MEM[S+2].INT,CURVAL);
MEM[R+3].INT:=XOVERN(MEM[S+3].INT,CURVAL);END;CURVAL:=R;END END;
END{:1200};IF ARITHERROR THEN BEGIN PRINTNL(1030);BEGIN HELPPTR:=2;
HELPLINE[1]:=1031;HELPLINE[0]:=1032;END;ERROR;GOTO 10;END;
CASE P OF 0:IF(A>=4)THEN GEQWORDDEFIN(3893+N,CURVAL)ELSE EQWORDDEFINE(
3893+N,CURVAL);
1:IF(A>=4)THEN GEQWORDDEFIN(4296+N,CURVAL)ELSE EQWORDDEFINE(4296+N,
CURVAL);
2:IF(A>=4)THEN GEQDEFINE(2386+N,111,CURVAL)ELSE EQDEFINE(2386+N,111,
CURVAL);
3:IF(A>=4)THEN GEQDEFINE(2642+N,111,CURVAL)ELSE EQDEFINE(2642+N,111,
CURVAL);END;10:END;{:1196}{1203:}PROCEDURE ALTERAUX;VAR C:HALFWORD;
BEGIN IF CURCHR<>ABS(CURLIST.MODEFIELD)THEN REPORTILLEGA ELSE BEGIN C:=
CURCHR;SCANOPTIONAL;IF C=1 THEN BEGIN SCANDIMEN(FALSE,FALSE,FALSE);
CURLIST.AUXFIELD:=CURVAL;END ELSE BEGIN SCANINT;
IF(CURVAL<=0)OR(CURVAL>65536)THEN BEGIN PRINTNL(1037);BEGIN HELPPTR:=1;
HELPLINE[0]:=1038;END;INTERROR(CURVAL);
END ELSE CURLIST.AUXFIELD:=CURVAL;END;END;END;{:1203}{1204:}
PROCEDURE ALTERPREVGRA;VAR P:0..NESTSIZE;BEGIN NEST[NESTPTR]:=CURLIST;
P:=NESTPTR;WHILE ABS(NEST[P].MODEFIELD)<>1 DO P:=P-1;SCANOPTIONAL;
SCANINT;IF CURVAL<0 THEN BEGIN PRINTNL(1039);BEGIN HELPPTR:=1;
HELPLINE[0]:=1040;END;INTERROR(CURVAL);
END ELSE BEGIN NEST[P].PGFIELD:=CURVAL;CURLIST:=NEST[NESTPTR];END;END;
{:1204}{1205:}PROCEDURE ALTERPAGESOF;VAR C:0..7;BEGIN C:=CURCHR;
SCANOPTIONAL;SCANDIMEN(FALSE,FALSE,FALSE);PAGESOFAR[C]:=CURVAL;END;
{:1205}{1206:}PROCEDURE ALTERINTEGER;VAR C:0..1;BEGIN C:=CURCHR;
SCANOPTIONAL;SCANINT;
IF C=0 THEN DEADCYCLES:=CURVAL ELSE INSERTPENALT:=CURVAL;END;{:1206}
{1214:}PROCEDURE NEWFONT(A:SMALLNUMBER);LABEL 10,50;VAR U:HALFWORD;
S:SCALED;F:INTERNALFONT;BEGIN IF JOBNAME=0 THEN OPENLOGFILE;{1217:}
GETRTOKEN;IF CSPTR<258 THEN BEGIN PRINTNL(1049);BEGIN HELPPTR:=2;
HELPLINE[1]:=1050;HELPLINE[0]:=1051;END;BACKERROR;GOTO 10;END;
REPEAT IF(HASHUSED=258)THEN OVERFLOW(327,2100);HASHUSED:=HASHUSED-1;
UNTIL HASH[HASHUSED].RH=0;U:=CSPTR;HASH[HASHUSED].RH:=HASH[U].RH;
CSCOUNT:=CSCOUNT+1;{:1217};
IF(A>=4)THEN GEQDEFINE(U,82,0)ELSE EQDEFINE(U,82,0);SCANOPTIONAL;
SCANFILENAME;{1215:}
IF SCANKEYWORD(1044)THEN BEGIN SCANDIMEN(FALSE,FALSE,FALSE);S:=CURVAL;
IF(S<=0)OR(S>=134217728)THEN BEGIN PRINTNL(1045);PRINTSCALED(S);
PRINT(1046);BEGIN HELPPTR:=2;HELPLINE[1]:=1047;HELPLINE[0]:=1048;END;
ERROR;S:=10*65536;END;END ELSE S:=0{:1215};{1216:}
FOR F:=1 TO FONTPTR DO IF STREQSTR(FONTNAME[F],CURNAME)AND STREQSTR(
FONTAREA[F],CURAREA)AND(((S=0)AND(FONTSIZE[F]=FONTDSIZE[F]))OR((S<>0)AND
(S=FONTSIZE[F])))THEN GOTO 50{:1216};
F:=READFONTINFO(U,CURNAME,CURAREA,S);50:EQTB[U].HH.RH:=F;
GEQDEFINE(HASHUSED,82,F);FONTIDENT[F]:=HASHUSED;10:END;{:1214}{1222:}
PROCEDURE NEWINTERACTI;BEGIN PRINTLN;INTERACTION:=CURCHR;{74:}
IF INTERACTION=0 THEN SELECTOR:=16 ELSE SELECTOR:=17{:74};
IF JOBNAME<>0 THEN SELECTOR:=SELECTOR+2;END;{:1222}
PROCEDURE PREFIXEDCOMM;LABEL 10;VAR A:SMALLNUMBER;J:HALFWORD;
K:0..FONTMEMSIZE;P,Q:HALFWORD;N:INTEGER;E:BOOLEAN;BEGIN A:=0;
WHILE CURCMD=84 DO BEGIN IF NOT ODD(A DIV CURCHR)THEN A:=A+CURCHR;{384:}
REPEAT GETXTOKEN;UNTIL CURCMD<>10{:384};IF CURCMD<=69 THEN{1173:}
BEGIN PRINTNL(987);PRINTCMDCHR(CURCMD,CURCHR);PRINTCHAR(39);
BEGIN HELPPTR:=1;HELPLINE[0]:=988;END;BACKERROR;GOTO 10;END{:1173};END;
{1174:}IF(CURCMD<>89)AND(A MOD 4<>0)THEN BEGIN PRINTNL(989);
PRINTCMDCHR(CURCMD,CURCHR);PRINTCHAR(39);BEGIN HELPPTR:=1;
HELPLINE[0]:=990;END;ERROR;END{:1174};{1175:}
IF EQTB[3892].INT<>0 THEN IF EQTB[3892].INT<0 THEN BEGIN IF(A>=4)THEN A
:=A-4;END ELSE BEGIN IF NOT(A>=4)THEN A:=A+4;END{:1175};
CASE CURCMD OF{1178:}
82:IF(A>=4)THEN GEQDEFINE(3160,114,CURCHR)ELSE EQDEFINE(3160,114,CURCHR)
;83:BEGIN SCANFOURBITI;
IF(A>=4)THEN GEQDEFINE(3209,114,CURVAL)ELSE EQDEFINE(3209,114,CURVAL);
END;{:1178}{1179:}89:BEGIN IF ODD(CURCHR)AND NOT(A>=4)THEN A:=A+4;
E:=(CURCHR>=2);GETRTOKEN;P:=CSPTR;Q:=SCANTOKS(TRUE,E);
IF(A>=4)THEN GEQDEFINE(P,106+(A MOD 4),DEFREF)ELSE EQDEFINE(P,106+(A MOD
4),DEFREF);END;{:1179}{1182:}85:BEGIN N:=CURCHR;GETRTOKEN;P:=CSPTR;
IF N=0 THEN BEGIN REPEAT GETTOKEN;UNTIL CURCMD<>10;
IF CURTOK=3133 THEN BEGIN GETTOKEN;IF CURCMD=10 THEN GETTOKEN;END;
END ELSE BEGIN GETTOKEN;Q:=CURTOK;GETTOKEN;BACKINPUT;CURTOK:=Q;
BACKINPUT;END;
IF CURCMD>=106 THEN MEM[CURCHR].HH.LH:=MEM[CURCHR].HH.LH+1;
IF(A>=4)THEN GEQDEFINE(P,CURCMD,CURCHR)ELSE EQDEFINE(P,CURCMD,CURCHR);
END;{:1182}{1183:}86:BEGIN GETRTOKEN;P:=CSPTR;SCANOPTIONAL;SCANCHARNUM;
IF(A>=4)THEN GEQDEFINE(P,65,CURVAL)ELSE EQDEFINE(P,65,CURVAL);END;
87:BEGIN GETRTOKEN;P:=CSPTR;SCANOPTIONAL;SCANFIFTEENB;
IF(A>=4)THEN GEQDEFINE(P,66,CURVAL)ELSE EQDEFINE(P,66,CURVAL);END;
{:1183}{1185:}88:BEGIN SCANFOURBITI;N:=CURVAL;GETRTOKEN;P:=CSPTR;
READTOKS(N,P);
IF(A>=4)THEN GEQDEFINE(P,106,CURVAL)ELSE EQDEFINE(P,106,CURVAL);END;
{:1185}{1186:}70:BEGIN Q:=CSPTR;P:=CURCHR;SCANOPTIONAL;CSPTR:=Q;
Q:=SCANTOKS(FALSE,FALSE);
IF MEM[DEFREF].HH.RH=0 THEN BEGIN IF(A>=4)THEN GEQDEFINE(P,98,0)ELSE
EQDEFINE(P,98,0);BEGIN MEM[DEFREF].HH.RH:=AVAIL;AVAIL:=DEFREF;
DYNUSED:=DYNUSED-1;END;
END ELSE BEGIN IF P=2899 THEN BEGIN MEM[Q].HH.RH:=GETAVAIL;
Q:=MEM[Q].HH.RH;MEM[Q].HH.LH:=637;Q:=GETAVAIL;MEM[Q].HH.LH:=379;
MEM[Q].HH.RH:=MEM[DEFREF].HH.RH;MEM[DEFREF].HH.RH:=Q;END;
IF(A>=4)THEN GEQDEFINE(P,106,DEFREF)ELSE EQDEFINE(P,106,DEFREF);END;END;
{:1186}{1187:}71:BEGIN P:=CURCHR;SCANOPTIONAL;SCANINT;
IF(A>=4)THEN GEQWORDDEFIN(3850+P,CURVAL)ELSE EQWORDDEFINE(3850+P,CURVAL)
;END;72:BEGIN P:=CURCHR;SCANOPTIONAL;SCANDIMEN(FALSE,FALSE,FALSE);
IF(A>=4)THEN GEQWORDDEFIN(4277+P,CURVAL)ELSE EQWORDDEFINE(4277+P,CURVAL)
;END;73:BEGIN P:=CURCHR;SCANOPTIONAL;
IF P>=14 THEN SCANGLUE(3)ELSE SCANGLUE(2);
IF(MEM[CURVAL+1].INT=0)AND(MEM[CURVAL+2].INT=0)AND(MEM[CURVAL+3].INT=0)
THEN BEGIN MEM[0].HH.RH:=MEM[0].HH.RH+1;DELETEGLUERE(CURVAL);CURVAL:=0;
END;
IF(A>=4)THEN GEQDEFINE(2369+P,111,CURVAL)ELSE EQDEFINE(2369+P,111,CURVAL
);END;{:1187}{1190:}80:BEGIN{1191:}
IF CURCHR=3210 THEN N:=15 ELSE IF CURCHR=3338 THEN N:=32767 ELSE IF
CURCHR=3722 THEN N:=65536 ELSE IF CURCHR=4149 THEN N:=16777215 ELSE N:=
127{:1191};P:=CURCHR;SCANSEVENBIT;P:=P+CURVAL;SCANOPTIONAL;SCANINT;
IF((CURVAL<0)AND(P<4149))OR(CURVAL>N)THEN BEGIN PRINTNL(1006);
PRINTINT(CURVAL);IF P<4149 THEN PRINT(1007)ELSE PRINT(1008);PRINTINT(N);
BEGIN HELPPTR:=1;HELPLINE[0]:=1009;END;ERROR;CURVAL:=0;END;
IF P<4149 THEN IF(A>=4)THEN GEQDEFINE(P,114,CURVAL)ELSE EQDEFINE(P,114,
CURVAL)ELSE IF(A>=4)THEN GEQWORDDEFIN(P,CURVAL)ELSE EQWORDDEFINE(P,
CURVAL);END;{:1190}{1192:}81:BEGIN P:=CURCHR;SCANFOURBITI;P:=P+CURVAL;
SCANOPTIONAL;SCANFONTIDEN;
IF(A>=4)THEN GEQDEFINE(P,114,CURVAL)ELSE EQDEFINE(P,114,CURVAL);END;
{:1192}{1195:}91,92,93,94:DOREGISTERCO(A);{:1195}{1201:}
95:BEGIN SCANEIGHTBIT;
IF(A>=4)THEN SAVESTACK[SAVEPTR+0].INT:=1073742080+CURVAL ELSE SAVESTACK[
SAVEPTR+0].INT:=1073741824+CURVAL;SCANOPTIONAL;SCANBOX;END;{:1201}
{1202:}75:ALTERAUX;76:ALTERPREVGRA;77:ALTERPAGESOF;78:ALTERINTEGER;
{:1202}{1207:}79:BEGIN SCANOPTIONAL;SCANINT;N:=CURVAL;
IF N<=0 THEN P:=0 ELSE BEGIN P:=GETNODE(2*N+1);MEM[P].HH.LH:=N;
FOR J:=1 TO N DO BEGIN SCANDIMEN(FALSE,FALSE,FALSE);
MEM[P+2*J-1].INT:=CURVAL;SCANDIMEN(FALSE,FALSE,FALSE);
MEM[P+2*J].INT:=CURVAL;END;END;
IF(A>=4)THEN GEQDEFINE(2898,112,P)ELSE EQDEFINE(2898,112,P);END;{:1207}
{1211:}96:IF CURCHR=1 THEN BEGIN NEWPATTERNS;GOTO 10;PRINTNL(1043);
HELPPTR:=0;ERROR;END ELSE NEWHYPHEXCEP;{:1211}{1212:}
74:BEGIN SCANTEXINFO(TRUE);K:=CURVAL;SCANOPTIONAL;
SCANDIMEN(FALSE,FALSE,FALSE);FONTINFO[K].INT:=CURVAL;END;{:1212}{1213:}
90:NEWFONT(A);{:1213}{1221:}97:NEWINTERACTI;{:1221}
OTHERS:CONFUSION(986)END;10:END;{:1172}{1223:}PROCEDURE DOASSIGNMENT;
BEGIN{384:}REPEAT GETXTOKEN;UNTIL CURCMD<>10{:384};
WHILE CURCMD>69 DO BEGIN PREFIXEDCOMM;{384:}REPEAT GETXTOKEN;
UNTIL CURCMD<>10{:384};END;END;{:1223}{1227:}PROCEDURE OPENORCLOSEI;
VAR C:0..1;N:0..15;BEGIN C:=CURCHR;SCANFOURBITI;N:=CURVAL;
IF READOPEN[N]<>2 THEN BEGIN ACLOSE(READFILE[N]);READOPEN[N]:=2;END;
IF C<>0 THEN BEGIN SCANOPTIONAL;SCANFILENAME;
IF CUREXT=228 THEN CUREXT:=612;PACKFILENAME(CURNAME,CURAREA,CUREXT);
IF AOPENIN(READFILE[N])THEN READOPEN[N]:=1;END;END;{:1227}{1231:}
PROCEDURE ISSUEMESSAGE;VAR OLDSETTING:0..21;C:0..1;S:STRNUMBER;
BEGIN C:=CURCHR;MEM[25012].HH.RH:=SCANTOKS(FALSE,TRUE);
OLDSETTING:=SELECTOR;SELECTOR:=21;TOKENSHOW(DEFREF);
SELECTOR:=OLDSETTING;FLUSHLIST(DEFREF);
BEGIN IF POOLPTR+1>POOLSIZE THEN OVERFLOW(129,POOLSIZE);END;
S:=MAKESTRING;IF C=0 THEN{1232:}
BEGIN IF TERMOFFSET+(STRSTART[S+1]-STRSTART[S])>MAXPRINTLINE-2 THEN
PRINTLN ELSE IF(TERMOFFSET>0)OR(FILEOFFSET>0)THEN PRINTCHAR(32);
PRINT(S);BREAK(TTY);END{:1232}ELSE{1235:}BEGIN PRINTNL(706);PRINT(S);
IF ERRHELPSEEN THEN BEGIN HELPPTR:=1;HELPLINE[0]:=1061;
END ELSE BEGIN HELPPTR:=4;HELPLINE[3]:=1062;HELPLINE[2]:=1063;
HELPLINE[1]:=1064;HELPLINE[0]:=1065;END;ERROR;
IF INTERACTION<3 THEN ERRHELPSEEN:=TRUE;END{:1235};
BEGIN STRPTR:=STRPTR-1;POOLPTR:=STRSTART[STRPTR];END;END;{:1231}{1239:}
PROCEDURE SHIFTCASE;VAR B:HALFWORD;P:HALFWORD;T:HALFWORD;C:EIGHTBITS;
BEGIN B:=CURCHR;P:=SCANTOKS(FALSE,FALSE);P:=MEM[DEFREF].HH.RH;
WHILE P<>0 DO BEGIN{1240:}T:=MEM[P].HH.LH;
IF(T<3328)AND(T>=2816)THEN BEGIN C:=T MOD 256;
IF C<128 THEN IF EQTB[B+C].HH.RH<>0 THEN MEM[P].HH.LH:=256*(T DIV 256)+
EQTB[B+C].HH.RH;END{:1240};P:=MEM[P].HH.RH;END;
BEGINTOKENLI(MEM[DEFREF].HH.RH,3);BEGIN MEM[DEFREF].HH.RH:=AVAIL;
AVAIL:=DEFREF;DYNUSED:=DYNUSED-1;END;END;{:1239}{1244:}
PROCEDURE SHOWWHATEVER;VAR P:HALFWORD;BEGIN CASE CURCHR OF 0:{1245:}
BEGIN GETTOKEN;IF CSPTR=0 THEN BEGIN PRINTNL(1077);BEGIN HELPPTR:=1;
HELPLINE[0]:=1078;END;BACKERROR;END ELSE BEGIN PRINTNL(1079);
SPRINTCS(CSPTR);PRINTCHAR(61);PRINTCMDCHR(CURCMD,CURCHR);
IF CURCMD>=106 THEN BEGIN PRINTLN;TOKENSHOW(CURCHR);
END ELSE IF CURCMD=105 THEN BEGIN PRINTCHAR(58);PRINTLN;
TOKENSHOW(CURMARK[CURCHR]);END;IF INTERACTION<3 THEN BEGIN HELPPTR:=0;
ERRORCOUNT:=ERRORCOUNT-1;
END ELSE IF EQTB[3879].INT<>0 THEN BEGIN BEGIN HELPPTR:=3;
HELPLINE[2]:=1072;HELPLINE[1]:=1073;HELPLINE[0]:=1074;END;
END ELSE BEGIN BEGIN HELPPTR:=5;HELPLINE[4]:=1072;HELPLINE[3]:=1073;
HELPLINE[2]:=1074;HELPLINE[1]:=1075;HELPLINE[0]:=1076;END;END;ERROR;END;
END{:1245};1:{1247:}BEGIN SCANEIGHTBIT;BEGINDIAGNOS;PRINTNL(1086);
PRINTINT(CURVAL);PRINTCHAR(61);
IF EQTB[2904+CURVAL].HH.RH=0 THEN PRINT(1087)ELSE SHOWBOX(EQTB[2904+
CURVAL].HH.RH);ENDDIAGNOSTI(TRUE);PRINTNL(1088);
IF INTERACTION<3 THEN BEGIN HELPPTR:=0;ERRORCOUNT:=ERRORCOUNT-1;
END ELSE IF EQTB[3879].INT<>0 THEN BEGIN BEGIN HELPPTR:=3;
HELPLINE[2]:=1072;HELPLINE[1]:=1073;HELPLINE[0]:=1074;END;
END ELSE BEGIN BEGIN HELPPTR:=5;HELPLINE[4]:=1072;HELPLINE[3]:=1073;
HELPLINE[2]:=1074;HELPLINE[1]:=1075;HELPLINE[0]:=1076;END;END;ERROR;
END{:1247};2:{1248:}BEGIN P:=THETOKS(FALSE);PRINTNL(1079);
TOKENSHOW(25003);FLUSHLIST(MEM[25003].HH.RH);
IF INTERACTION<3 THEN BEGIN HELPPTR:=0;ERRORCOUNT:=ERRORCOUNT-1;
END ELSE IF EQTB[3879].INT<>0 THEN BEGIN BEGIN HELPPTR:=3;
HELPLINE[2]:=1072;HELPLINE[1]:=1073;HELPLINE[0]:=1074;END;
END ELSE BEGIN BEGIN HELPPTR:=5;HELPLINE[4]:=1072;HELPLINE[3]:=1073;
HELPLINE[2]:=1074;HELPLINE[1]:=1075;HELPLINE[0]:=1076;END;END;ERROR;
END{:1248};OTHERS:{1249:}BEGIN BEGINDIAGNOS;SHOWACTIVITI;
ENDDIAGNOSTI(TRUE);PRINTNL(1088);IF INTERACTION<3 THEN BEGIN HELPPTR:=0;
ERRORCOUNT:=ERRORCOUNT-1;
END ELSE IF EQTB[3879].INT<>0 THEN BEGIN BEGIN HELPPTR:=3;
HELPLINE[2]:=1072;HELPLINE[1]:=1073;HELPLINE[0]:=1074;END;
END ELSE BEGIN BEGIN HELPPTR:=5;HELPLINE[4]:=1072;HELPLINE[3]:=1073;
HELPLINE[2]:=1074;HELPLINE[1]:=1075;HELPLINE[0]:=1076;END;END;ERROR;
END{:1249}END;END;{:1244}{1253:}PROCEDURE STOREFMTFILE;
LABEL 41,42,31,32;VAR J,K,L:INTEGER;P,Q:HALFWORD;X:INTEGER;
W:FOURQUARTERS;BEGIN{1255:}IF SAVEPTR<>0 THEN BEGIN PRINTNL(1090);
BEGIN HELPPTR:=1;HELPLINE[0]:=1091;END;
BEGIN IF INTERACTION=3 THEN INTERACTION:=2;ERROR;
{IF INTERACTION>0 THEN DEBUGHELP;}HISTORY:=3;JUMPOUT;END;END{:1255};
{1279:}SELECTOR:=21;PRINT(1101);PRINT(JOBNAME);PRINTCHAR(32);
PRINTINT(EQTB[3873].INT MOD 100);PRINTCHAR(46);PRINTINT(EQTB[3872].INT);
PRINTCHAR(46);PRINTINT(EQTB[3871].INT);PRINTCHAR(41);
IF INTERACTION=0 THEN SELECTOR:=18 ELSE SELECTOR:=19;
BEGIN IF POOLPTR+1>POOLSIZE THEN OVERFLOW(129,POOLSIZE);END;
FORMATIDENT:=MAKESTRING;PACKJOBNAME(1102);
WHILE NOT WOPENOUT(FMTFILE)DO PROMPTFILENA(1103,1102);PRINTNL(1104);
PRINT(WMAKENAMESTR(FMTFILE));BEGIN STRPTR:=STRPTR-1;
POOLPTR:=STRSTART[STRPTR];END;PRINT(FORMATIDENT){:1279};{1258:}
BEGIN FMTFILE↑.INT:=463829795;PUT(FMTFILE);END;
BEGIN FMTFILE↑.INT:=25000;PUT(FMTFILE);END;BEGIN FMTFILE↑.INT:=4551;
PUT(FMTFILE);END;BEGIN FMTFILE↑.INT:=1777;PUT(FMTFILE);END;
BEGIN FMTFILE↑.INT:=307;PUT(FMTFILE);END{:1258};{1260:}
BEGIN FMTFILE↑.INT:=POOLPTR;PUT(FMTFILE);END;BEGIN FMTFILE↑.INT:=STRPTR;
PUT(FMTFILE);END;FOR K:=0 TO STRPTR DO BEGIN FMTFILE↑.INT:=STRSTART[K];
PUT(FMTFILE);END;K:=0;WHILE K+4<POOLPTR DO BEGIN W.B0:=STRPOOL[K];
W.B1:=STRPOOL[K+1];W.B2:=STRPOOL[K+2];W.B3:=STRPOOL[K+3];
BEGIN FMTFILE↑.QQQQ:=W;PUT(FMTFILE);END;K:=K+4;END;K:=POOLPTR-4;
W.B0:=STRPOOL[K];W.B1:=STRPOOL[K+1];W.B2:=STRPOOL[K+2];
W.B3:=STRPOOL[K+3];BEGIN FMTFILE↑.QQQQ:=W;PUT(FMTFILE);END;PRINTLN;
PRINTINT(STRPTR);PRINT(1092);PRINTINT(POOLPTR){:1260};{1262:}SORTAVAIL;
VARUSED:=0;BEGIN FMTFILE↑.INT:=ROVER;PUT(FMTFILE);END;P:=0;Q:=ROVER;
X:=0;REPEAT FOR K:=P TO Q+1 DO BEGIN FMTFILE↑:=MEM[K];PUT(FMTFILE);END;
X:=X+Q+2-P;VARUSED:=VARUSED+Q-P;P:=Q+MEM[Q].HH.LH;Q:=MEM[Q+1].HH.RH;
UNTIL Q=ROVER;VARUSED:=VARUSED+25000-P;DYNUSED:=MEMEND-24999;
BEGIN FMTFILE↑.INT:=MEMEND;PUT(FMTFILE);END;BEGIN FMTFILE↑.INT:=AVAIL;
PUT(FMTFILE);END;FOR K:=P TO MEMEND DO BEGIN FMTFILE↑:=MEM[K];
PUT(FMTFILE);END;X:=X+MEMEND+1-P;P:=AVAIL;
WHILE P<>0 DO BEGIN DYNUSED:=DYNUSED-1;P:=MEM[P].HH.RH;END;
BEGIN FMTFILE↑.INT:=VARUSED;PUT(FMTFILE);END;
BEGIN FMTFILE↑.INT:=DYNUSED;PUT(FMTFILE);END;PRINTLN;PRINTINT(X);
PRINT(1093);PRINTINT(VARUSED);PRINTCHAR(38);PRINTINT(DYNUSED){:1262};
{1264:}{1266:}K:=1;REPEAT J:=K;
WHILE J<3849 DO BEGIN IF(EQTB[J].HH.RH=EQTB[J+1].HH.RH)AND(EQTB[J].HH.B0
=EQTB[J+1].HH.B0)AND(EQTB[J].HH.B1=EQTB[J+1].HH.B1)THEN GOTO 41;J:=J+1;
END;L:=3850;GOTO 31;41:J:=J+1;L:=J;
WHILE J<3849 DO BEGIN IF(EQTB[J].HH.RH<>EQTB[J+1].HH.RH)OR(EQTB[J].HH.B0
<>EQTB[J+1].HH.B0)OR(EQTB[J].HH.B1<>EQTB[J+1].HH.B1)THEN GOTO 31;J:=J+1;
END;31:BEGIN FMTFILE↑.INT:=L-K;PUT(FMTFILE);END;
WHILE K<L DO BEGIN BEGIN FMTFILE↑:=EQTB[K];PUT(FMTFILE);END;K:=K+1;END;
K:=J+1;BEGIN FMTFILE↑.INT:=K-L;PUT(FMTFILE);END;UNTIL K=3850{:1266};
{1267:}REPEAT J:=K;
WHILE J<4551 DO BEGIN IF EQTB[J].INT=EQTB[J+1].INT THEN GOTO 42;J:=J+1;
END;L:=4552;GOTO 32;42:J:=J+1;L:=J;
WHILE J<4551 DO BEGIN IF EQTB[J].INT<>EQTB[J+1].INT THEN GOTO 32;J:=J+1;
END;32:BEGIN FMTFILE↑.INT:=L-K;PUT(FMTFILE);END;
WHILE K<L DO BEGIN BEGIN FMTFILE↑:=EQTB[K];PUT(FMTFILE);END;K:=K+1;END;
K:=J+1;BEGIN FMTFILE↑.INT:=K-L;PUT(FMTFILE);END;UNTIL K>4551{:1267};
BEGIN FMTFILE↑.INT:=PARLOC;PUT(FMTFILE);END;
BEGIN FMTFILE↑.INT:=WRITELOC;PUT(FMTFILE);END;{1269:}
BEGIN FMTFILE↑.INT:=HASHUSED;PUT(FMTFILE);END;CSCOUNT:=2357-HASHUSED;
FOR P:=258 TO HASHUSED DO IF HASH[P].RH<>0 THEN BEGIN BEGIN FMTFILE↑.INT
:=P;PUT(FMTFILE);END;BEGIN FMTFILE↑.HH:=HASH[P];PUT(FMTFILE);END;
CSCOUNT:=CSCOUNT+1;END;
FOR P:=HASHUSED+1 TO 2367 DO BEGIN FMTFILE↑.HH:=HASH[P];PUT(FMTFILE);
END;BEGIN FMTFILE↑.INT:=CSCOUNT;PUT(FMTFILE);END;PRINTLN;
PRINTINT(CSCOUNT);PRINT(1094){:1269}{:1264};{1271:}
BEGIN FMTFILE↑.INT:=FMEMPTR;PUT(FMTFILE);END;
FOR K:=0 TO FMEMPTR-1 DO BEGIN FMTFILE↑:=FONTINFO[K];PUT(FMTFILE);END;
BEGIN FMTFILE↑.INT:=FONTPTR;PUT(FMTFILE);END;
FOR K:=0 TO FONTPTR DO{1273:}BEGIN BEGIN FMTFILE↑.INT:=FONTIDENT[K];
PUT(FMTFILE);END;BEGIN FMTFILE↑.QQQQ:=FONTCHECK[K];PUT(FMTFILE);END;
BEGIN FMTFILE↑.INT:=FONTSIZE[K];PUT(FMTFILE);END;
BEGIN FMTFILE↑.INT:=FONTDSIZE[K];PUT(FMTFILE);END;
BEGIN FMTFILE↑.INT:=FONTPARAMS[K];PUT(FMTFILE);END;
BEGIN FMTFILE↑.INT:=FONTNAME[K];PUT(FMTFILE);END;
BEGIN FMTFILE↑.INT:=FONTAREA[K];PUT(FMTFILE);END;
BEGIN FMTFILE↑.INT:=FONTBC[K];PUT(FMTFILE);END;
BEGIN FMTFILE↑.INT:=FONTEC[K];PUT(FMTFILE);END;
BEGIN FMTFILE↑.INT:=CHARBASE[K];PUT(FMTFILE);END;
BEGIN FMTFILE↑.INT:=WIDTHBASE[K];PUT(FMTFILE);END;
BEGIN FMTFILE↑.INT:=HEIGHTBASE[K];PUT(FMTFILE);END;
BEGIN FMTFILE↑.INT:=DEPTHBASE[K];PUT(FMTFILE);END;
BEGIN FMTFILE↑.INT:=ITALICBASE[K];PUT(FMTFILE);END;
BEGIN FMTFILE↑.INT:=LIGKERNBASE[K];PUT(FMTFILE);END;
BEGIN FMTFILE↑.INT:=KERNBASE[K];PUT(FMTFILE);END;
BEGIN FMTFILE↑.INT:=EXTENBASE[K];PUT(FMTFILE);END;
BEGIN FMTFILE↑.INT:=PARAMBASE[K];PUT(FMTFILE);END;
BEGIN FMTFILE↑.INT:=FONTGLUE[K];PUT(FMTFILE);END;PRINTNL(1097);
SPRINTCS(FONTIDENT[K]);PRINTCHAR(61);
PRINTFILENAM(FONTNAME[K],FONTAREA[K],228);
IF FONTSIZE[K]<>FONTDSIZE[K]THEN BEGIN PRINT(563);
PRINTSCALED(FONTSIZE[K]);PRINT(527);END;END{:1273};PRINTLN;
PRINTINT(FMEMPTR-7);PRINT(1095);PRINTINT(FONTPTR-0);PRINT(1096);
IF FONTPTR<>1 THEN PRINTCHAR(115){:1271};{1275:}
BEGIN FMTFILE↑.INT:=HYPHCOUNT;PUT(FMTFILE);END;
FOR K:=0 TO 307 DO IF HYPHWORD[K]<>0 THEN BEGIN BEGIN FMTFILE↑.INT:=K;
PUT(FMTFILE);END;BEGIN FMTFILE↑.INT:=HYPHWORD[K];PUT(FMTFILE);END;
BEGIN FMTFILE↑.INT:=HYPHLIST[K];PUT(FMTFILE);END;END;
BEGIN FMTFILE↑.INT:=TRIEMAX;PUT(FMTFILE);END;
FOR K:=0 TO TRIEMAX DO BEGIN FMTFILE↑.HH:=TRIE[K];PUT(FMTFILE);END;
BEGIN FMTFILE↑.INT:=TRIEOPPTR;PUT(FMTFILE);END;
FOR K:=1 TO TRIEOPPTR DO BEGIN BEGIN FMTFILE↑.INT:=HYFDISTANCE[K];
PUT(FMTFILE);END;BEGIN FMTFILE↑.INT:=HYFNUM[K];PUT(FMTFILE);END;
BEGIN FMTFILE↑.INT:=HYFNEXT[K];PUT(FMTFILE);END;END;PRINTLN;
PRINTINT(HYPHCOUNT);PRINT(1098);IF HYPHCOUNT<>1 THEN PRINTCHAR(115);
PRINTNL(1099);PRINTINT(TRIEMAX);PRINT(639);PRINTINT(TRIEOPPTR);
PRINT(1100);IF TRIEOPPTR<>1 THEN PRINTCHAR(115){:1275};{1277:}
BEGIN FMTFILE↑.INT:=INTERACTION;PUT(FMTFILE);END;
BEGIN FMTFILE↑.INT:=FORMATIDENT;PUT(FMTFILE);END;
BEGIN FMTFILE↑.INT:=69069;PUT(FMTFILE);END;EQTB[3881].INT:=0{:1277};
{1280:}WCLOSE(FMTFILE){:1280};END;{:1253}{1300:}{1301:}
PROCEDURE NEWWHATSIT(S:SMALLNUMBER;W:SMALLNUMBER);VAR P:HALFWORD;
BEGIN P:=GETNODE(W);MEM[P].HH.B0:=8;MEM[P].HH.B1:=S;
MEM[CURLIST.TAILFIELD].HH.RH:=P;CURLIST.TAILFIELD:=P;END;{:1301}{1302:}
PROCEDURE NEWWRITEWHAT(W:SMALLNUMBER);BEGIN NEWWHATSIT(CURCHR,W);
SCANFOURBITI;MEM[CURLIST.TAILFIELD+1].HH.LH:=CURVAL;END;{:1302}
PROCEDURE DOEXTENSION;VAR I,J,K:INTEGER;P,Q,R:HALFWORD;
BEGIN CASE CURCHR OF 0:{1303:}BEGIN NEWWRITEWHAT(3);SCANOPTIONAL;
SCANFILENAME;MEM[CURLIST.TAILFIELD+1].HH.RH:=CURNAME;
MEM[CURLIST.TAILFIELD+2].HH.LH:=CURAREA;
MEM[CURLIST.TAILFIELD+2].HH.RH:=CUREXT;END{:1303};1:{1304:}
BEGIN K:=CSPTR;NEWWRITEWHAT(2);CSPTR:=K;P:=SCANTOKS(FALSE,FALSE);
MEM[CURLIST.TAILFIELD+1].HH.RH:=DEFREF;END{:1304};2:{1305:}
BEGIN NEWWRITEWHAT(2);MEM[CURLIST.TAILFIELD+1].HH.RH:=0;END{:1305};
3:{1306:}BEGIN NEWWHATSIT(3,2);MEM[CURLIST.TAILFIELD+1].HH.LH:=0;
P:=SCANTOKS(FALSE,TRUE);MEM[CURLIST.TAILFIELD+1].HH.RH:=DEFREF;
END{:1306};4:{1326:}BEGIN GETXTOKEN;
IF(CURCMD=57)AND(CURCHR<=2)THEN BEGIN P:=CURLIST.TAILFIELD;DOEXTENSION;
OUTWHAT(CURLIST.TAILFIELD);FLUSHNODELIS(CURLIST.TAILFIELD);
CURLIST.TAILFIELD:=P;MEM[P].HH.RH:=0;END ELSE BACKINPUT;END{:1326};
OTHERS:CONFUSION(1126)END;END;{:1300}{1026:}PROCEDURE HANDLERIGHTB;
VAR P,Q:HALFWORD;D:SCALED;F:INTEGER;BEGIN CASE CURGROUP OF 1:UNSAVE;
0:BEGIN PRINTNL(854);BEGIN HELPPTR:=2;HELPLINE[1]:=855;HELPLINE[0]:=856;
END;ERROR;END;13,14,15:EXTRARIGHTBR;{1043:}2:PACKAGE(0);3:BEGIN ENDGRAF;
PACKAGE(0);END;4:BEGIN ENDGRAF;PACKAGE(4);END;{:1043}{1059:}
10:BEGIN ENDGRAF;Q:=EQTB[2378].HH.RH;MEM[Q].HH.RH:=MEM[Q].HH.RH+1;
D:=EQTB[4284].INT;F:=EQTB[3891].INT;UNSAVE;SAVEPTR:=SAVEPTR-1;
P:=VPACKAGE(MEM[CURLIST.HEADFIELD].HH.RH,0,1,1073741823);POPNEST;
IF SAVESTACK[SAVEPTR+0].INT<255 THEN BEGIN BEGIN MEM[CURLIST.TAILFIELD].
HH.RH:=GETNODE(5);CURLIST.TAILFIELD:=MEM[CURLIST.TAILFIELD].HH.RH;END;
MEM[CURLIST.TAILFIELD].HH.B0:=3;
MEM[CURLIST.TAILFIELD].HH.B1:=SAVESTACK[SAVEPTR+0].INT;
MEM[CURLIST.TAILFIELD+3].INT:=MEM[P+3].INT+MEM[P+2].INT;
MEM[CURLIST.TAILFIELD+4].HH.LH:=MEM[P+5].HH.RH;
MEM[CURLIST.TAILFIELD+4].HH.RH:=Q;MEM[CURLIST.TAILFIELD+2].INT:=D;
MEM[CURLIST.TAILFIELD+1].INT:=F;
END ELSE BEGIN BEGIN MEM[CURLIST.TAILFIELD].HH.RH:=GETNODE(2);
CURLIST.TAILFIELD:=MEM[CURLIST.TAILFIELD].HH.RH;END;
MEM[CURLIST.TAILFIELD].HH.B0:=5;MEM[CURLIST.TAILFIELD].HH.B1:=0;
MEM[CURLIST.TAILFIELD+1].INT:=MEM[P+5].HH.RH;DELETEGLUERE(Q);END;
FREENODE(P,7);IF NESTPTR=0 THEN BUILDPAGE;END;7:{984:}
BEGIN IF CURINPUT.LOCFIELD<>0 THEN{985:}BEGIN PRINTNL(816);
BEGIN HELPPTR:=2;HELPLINE[1]:=817;HELPLINE[0]:=818;END;ERROR;
REPEAT GETTOKEN;UNTIL CURINPUT.LOCFIELD=0;END{:985};ENDTOKENLIST;
ENDGRAF;UNSAVE;OUTPUTACTIVE:=FALSE;INSERTPENALT:=0;{986:}
IF EQTB[3159].HH.RH<>0 THEN BEGIN PRINTNL(819);BEGIN HELPPTR:=3;
HELPLINE[2]:=820;HELPLINE[1]:=821;HELPLINE[0]:=822;END;BOX255ERROR;
END{:986};
IF CURLIST.TAILFIELD<>CURLIST.HEADFIELD THEN BEGIN MEM[PAGETAIL].HH.RH:=
MEM[CURLIST.HEADFIELD].HH.RH;PAGETAIL:=CURLIST.TAILFIELD;END;
IF MEM[25002].HH.RH<>0 THEN BEGIN IF MEM[25001].HH.RH=0 THEN NEST[0].
TAILFIELD:=PAGETAIL;MEM[PAGETAIL].HH.RH:=MEM[25001].HH.RH;
MEM[25001].HH.RH:=MEM[25002].HH.RH;MEM[25002].HH.RH:=0;PAGETAIL:=25002;
END;POPNEST;BUILDPAGE;END{:984};{:1059}{1077:}9:BUILDDISCRET;{:1077}
{1095:}5:BEGIN BACKINPUT;CURTOK:=6455;PRINTNL(934);BEGIN HELPPTR:=1;
HELPLINE[0]:=935;END;INSERROR;END;{:1095}{1096:}6:BEGIN ENDGRAF;UNSAVE;
ALIGNPEEK;END;{:1096}{1130:}11:BEGIN ENDGRAF;UNSAVE;SAVEPTR:=SAVEPTR-2;
P:=VPACKAGE(MEM[CURLIST.HEADFIELD].HH.RH,SAVESTACK[SAVEPTR+1].INT,
SAVESTACK[SAVEPTR+0].INT,1073741823);POPNEST;
BEGIN MEM[CURLIST.TAILFIELD].HH.RH:=NEWNOAD;
CURLIST.TAILFIELD:=MEM[CURLIST.TAILFIELD].HH.RH;END;
MEM[CURLIST.TAILFIELD].HH.B0:=29;MEM[CURLIST.TAILFIELD+1].HH.RH:=2;
MEM[CURLIST.TAILFIELD+1].HH.LH:=P;END;{:1130}{1135:}12:BUILDCHOICES;
{:1135}{1148:}8:BEGIN UNSAVE;SAVEPTR:=SAVEPTR-1;
MEM[SAVESTACK[SAVEPTR+0].INT].HH.RH:=3;
MEM[SAVESTACK[SAVEPTR+0].INT].HH.LH:=FINMLIST(0);END;{:1148}
OTHERS:CONFUSION(857)END;END;{:1026}PROCEDURE MAINCONTROL;
LABEL 60,21,70,71,72,73,74,10;VAR T:INTEGER;{990:}L:QUARTERWORD;
C:EIGHTBITS;F:INTERNALFONT;R:HALFWORD;P:HALFWORD;K:0..FONTMEMSIZE;
Q:HALFWORD;I:FOURQUARTERS;J:FOURQUARTERS;S:INTEGER;LIGATUREPRES:BOOLEAN;
{:990}BEGIN 60:GETXTOKEN;21:{989:}
IF INTERRUPT>0 THEN IF OKTOINTERRUP THEN BEGIN BACKINPUT;PAUSEFORINST;
GOTO 60;END;{IF PANICKING THEN CHECKMEM(FALSE);}
IF EQTB[3886].INT>0 THEN SHOWCURCMDCH{:989};
CASE ABS(CURLIST.MODEFIELD)+CURCMD OF 110,111,164:GOTO 70;
115:BEGIN SCANCHARNUM;CURCHR:=CURVAL;GOTO 70;END;
109:IF CURLIST.AUXFIELD=1000 THEN GOTO 74 ELSE APPSPACE;161,259:GOTO 74;
{1003:}1,99,197,11,14,207:;40,138,236:BEGIN{384:}REPEAT GETXTOKEN;
UNTIL CURCMD<>10{:384};GOTO 21;END;15:IF ITSALLOVER THEN GOTO 10;{1006:}
23,120,218,{:1006}{1049:}238,{:1049}{1057:}39,235,{:1057}{1070:}
220,43,{:1070}{1084:}240,{:1084}{1092:}34,131,230,{:1092}{1107:}
47,145,{:1107}7,105,203:REPORTILLEGA;{1004:}
8,106,9,107,18,116,67,165,49,147,16,114,48,146,51,149,64,162,52,150,53,
151,55,153,54,152,31,129,50,148,29,127,45,143,206,210,211,224,221,233{:
1004}:INSERTDOLLAR;{1014:}
37,134,232:BEGIN BEGIN MEM[CURLIST.TAILFIELD].HH.RH:=SCANRULESPEC;
CURLIST.TAILFIELD:=MEM[CURLIST.TAILFIELD].HH.RH;END;
IF ABS(CURLIST.MODEFIELD)=1 THEN CURLIST.AUXFIELD:=-65536000;END;{:1014}
{1015:}28,125,223,225:APPENDGLUE;30,128,226,227:APPENDKERN;{:1015}
{1021:}2,100:NEWSAVELEVEL(1);60,158,256:NEWSAVELEVEL(13);
61,159,257:IF CURGROUP=13 THEN UNSAVE ELSE OFFSAVE;{:1021}{1025:}
3,101,199:HANDLERIGHTB;{:1025}{1031:}22,121,219:BEGIN T:=CURCHR;
SCANDIMEN(FALSE,FALSE,FALSE);
IF T=0 THEN SAVESTACK[SAVEPTR+0].INT:=CURVAL ELSE SAVESTACK[SAVEPTR+0].
INT:=-CURVAL;SCANBOX;END;
32,130,228:BEGIN SAVESTACK[SAVEPTR+0].INT:=1073742237+CURCHR;SCANBOX;
END;21,119,217:BEGIN SAVESTACK[SAVEPTR+0].INT:=0;BEGINBOX;END;{:1031}
{1048:}42:NEWGRAF(CURCHR>0);
12,13,17,66,4,68,24,36,44,46,27,63,69:BEGIN BACKINPUT;NEWGRAF(TRUE);END;
{:1048}{1051:}140:INDENTINHMOD;{:1051}{1053:}
112:BEGIN IF ALIGNSTATE<0 THEN OFFSAVE;ENDGRAF;
IF CURLIST.MODEFIELD=1 THEN BUILDPAGE;END;113,126,135,123:HEADFORVMODE;
{:1053}{1056:}38,136,234,137:BEGININSERTO;19,117,215:MAKEMARK;{:1056}
{1061:}41,139,237:APPENDPENALT;{:1061}{1063:}26,124,222:DELETESKIP;
{:1063}{1068:}25,122:UNPACKAGE;{:1068}{1071:}141:APPENDITALIC;
239:BEGIN MEM[CURLIST.TAILFIELD].HH.RH:=NEWKERN(0);
CURLIST.TAILFIELD:=MEM[CURLIST.TAILFIELD].HH.RH;END;{:1071}{1075:}
144,242:APPENDDISCRE;{:1075}{1081:}
166,264:BEGIN MEM[25012].HH.RH:=THETOKS(CURCHR>0);
BEGINTOKENLI(MEM[25003].HH.RH,4);END;167,265,168,266:INSTHE;{:1081}
{1083:}142:MAKEACCENT;{:1083}{1088:}6,104,202,5,103,201:ALIGNERROR;
35,133,231:NOALIGNERROR;62,160,258:OMITERROR;{:1088}{1093:}
33,132:INITALIGN;
229:IF PRIVILEGED THEN IF CURGROUP=14 THEN INITALIGN ELSE OFFSAVE;
10,108:DOENDV;{:1093}{1097:}65,163,261:CSERROR;{:1097}{1100:}
102:INITMATH;{:1100}{1103:}243:IF PRIVILEGED THEN STARTEQNO;{:1103}
{1113:}198:BEGIN BEGIN MEM[CURLIST.TAILFIELD].HH.RH:=NEWNOAD;
CURLIST.TAILFIELD:=MEM[CURLIST.TAILFIELD].HH.RH;END;
MEM[CURLIST.TAILFIELD].HH.B0:=23;BACKINPUT;
SCANMATH(CURLIST.TAILFIELD+1);END;{:1113}{1116:}
208,209,262:IF CURCHR<128 THEN SETMATHCHAR(EQTB[3338+CURCHR].HH.RH)ELSE
SETMATHCHAR(CURCHR);213:BEGIN SCANCHARNUM;
IF CURVAL<128 THEN SETMATHCHAR(EQTB[3338+CURVAL].HH.RH)ELSE SETMATHCHAR(
CURVAL);END;214:BEGIN SCANFIFTEENB;SETMATHCHAR(CURVAL);END;
263:SETMATHCHAR(CURCHR);212:BEGIN SCANTWENTYSE;
SETMATHCHAR(CURVAL DIV 4096);END;{:1116}{1121:}
245:BEGIN BEGIN MEM[CURLIST.TAILFIELD].HH.RH:=NEWNOAD;
CURLIST.TAILFIELD:=MEM[CURLIST.TAILFIELD].HH.RH;END;
MEM[CURLIST.TAILFIELD].HH.B0:=CURCHR;SCANMATH(CURLIST.TAILFIELD+1);END;
246:MATHLIMITSWI;{:1121}{1125:}260:MATHRADICAL;{:1125}{1127:}241:MATHAC;
{:1127}{1129:}251:BEGIN SCANSPEC;NEWSAVELEVEL(11);NORMALPARAGR;PUSHNEST;
CURLIST.MODEFIELD:=-1;CURLIST.AUXFIELD:=-65536000;END;{:1129}{1133:}
248:BEGIN MEM[CURLIST.TAILFIELD].HH.RH:=NEWSTYLE(CURCHR);
CURLIST.TAILFIELD:=MEM[CURLIST.TAILFIELD].HH.RH;END;
250:BEGIN BEGIN MEM[CURLIST.TAILFIELD].HH.RH:=NEWGLUE(0);
CURLIST.TAILFIELD:=MEM[CURLIST.TAILFIELD].HH.RH;END;
MEM[CURLIST.TAILFIELD].HH.B1:=98;END;249:APPENDCHOICE;{:1133}{1137:}
205,204:SUBSUP;{:1137}{1142:}247:MATHFRACTION;{:1142}{1151:}
244:MATHLEFTRIGH;{:1151}{1154:}
200:IF CURGROUP=14 THEN FINMATH ELSE OFFSAVE;{:1154}{1171:}
71,169,267,72,170,268,73,171,269,74,172,270,75,173,271,76,174,272,77,175
,273,78,176,274,79,177,275,80,178,276,81,179,277,82,180,278,83,181,279,
84,182,280,85,183,281,86,184,282,87,185,283,88,186,284,89,187,285,90,188
,286,91,189,287,92,190,288,93,191,289,94,192,290,95,193,291,96,194,292,
97,195,293,98,196,294:PREFIXEDCOMM;{:1171}{1226:}
59,157,255:OPENORCLOSEI;{:1226}{1228:}57,155,253:ISSUEMESSAGE;{:1228}
{1236:}56,154,252:SHIFTCASE;{:1236}{1241:}20,118,216:SHOWWHATEVER;
{:1241}{1299:}58,156,254:DOEXTENSION;{:1299}{:1003}END;GOTO 60;70:{991:}
F:=EQTB[3160].HH.RH;C:=CURCHR;
71:IF(C<FONTBC[F])OR(C>FONTEC[F])THEN BEGIN CHARWARNING(F,C);GOTO 60;
END;72:Q:=CURLIST.TAILFIELD;LIGATUREPRES:=FALSE;L:=C;73:{992:}
IF C<128 THEN BEGIN S:=EQTB[3722+C].HH.RH;
IF S=1000 THEN CURLIST.AUXFIELD:=1000 ELSE IF S<1000 THEN BEGIN IF S>0
THEN CURLIST.AUXFIELD:=S;
END ELSE IF CURLIST.AUXFIELD<1000 THEN CURLIST.AUXFIELD:=1000 ELSE
CURLIST.AUXFIELD:=S;END ELSE CURLIST.AUXFIELD:=1000{:992};{993:}
I:=FONTINFO[CHARBASE[F]+L].QQQQ;IF(I.B0>0)THEN BEGIN BEGIN P:=AVAIL;
IF P=0 THEN P:=GETAVAIL ELSE BEGIN AVAIL:=MEM[P].HH.RH;MEM[P].HH.RH:=0;
DYNUSED:=DYNUSED+1;END;END;MEM[P].HH.B0:=F;MEM[P].HH.B1:=C;
MEM[CURLIST.TAILFIELD].HH.RH:=P;CURLIST.TAILFIELD:=P;
END ELSE CHARWARNING(F,L);{994:}GETNEXT;
IF CURCMD=11 THEN R:=CURCHR ELSE IF CURCMD=12 THEN R:=CURCHR ELSE IF
CURCMD=65 THEN R:=CURCHR ELSE BEGIN XTOKEN;
IF(CURCMD=11)OR(CURCMD=12)THEN R:=CURCHR ELSE IF CURCMD=16 THEN BEGIN
SCANCHARNUM;R:=CURVAL;END ELSE R:=256;END;
IF(I.B2 MOD 4)=1 THEN IF R<>256 THEN{995:}BEGIN K:=LIGKERNBASE[F]+I.B3;
REPEAT J:=FONTINFO[K].QQQQ;IF J.B1=R THEN IF J.B2<128 THEN{998:}
BEGIN LIGATUREPRES:=TRUE;L:=J.B3;C:=R;GOTO 73;END{:998}ELSE{996:}
BEGIN{997:}IF LIGATUREPRES THEN BEGIN P:=NEWLIGATURE(F,L,MEM[Q].HH.RH);
MEM[Q].HH.RH:=P;CURLIST.TAILFIELD:=P;END;
IF C=45 THEN IF CURLIST.MODEFIELD=99 THEN BEGIN MEM[CURLIST.TAILFIELD].
HH.RH:=NEWDISC;CURLIST.TAILFIELD:=MEM[CURLIST.TAILFIELD].HH.RH;END{:997}
;BEGIN MEM[CURLIST.TAILFIELD].HH.RH:=NEWKERN(FONTINFO[KERNBASE[F]+J.B3].
INT);CURLIST.TAILFIELD:=MEM[CURLIST.TAILFIELD].HH.RH;END;C:=R;GOTO 72;
END{:996};K:=K+1;UNTIL J.B0>=128;END{:995};{997:}
IF LIGATUREPRES THEN BEGIN P:=NEWLIGATURE(F,L,MEM[Q].HH.RH);
MEM[Q].HH.RH:=P;CURLIST.TAILFIELD:=P;END;
IF C=45 THEN IF CURLIST.MODEFIELD=99 THEN BEGIN MEM[CURLIST.TAILFIELD].
HH.RH:=NEWDISC;CURLIST.TAILFIELD:=MEM[CURLIST.TAILFIELD].HH.RH;END{:997}
;IF R=256 THEN GOTO 21;C:=R;GOTO 71{:994}{:993}{:991};74:{999:}
IF EQTB[2380].HH.RH=0 THEN BEGIN{1000:}
BEGIN P:=FONTGLUE[EQTB[3160].HH.RH];
IF P=0 THEN BEGIN F:=EQTB[3160].HH.RH;P:=NEWSPEC(0);K:=PARAMBASE[F]+2;
MEM[P+1].INT:=FONTINFO[K].INT;MEM[P+2].INT:=FONTINFO[K+1].INT;
MEM[P+3].INT:=FONTINFO[K+2].INT;FONTGLUE[F]:=P;END;END{:1000};
Q:=NEWGLUE(P);END ELSE Q:=NEWPARAMGLUE(11);
MEM[CURLIST.TAILFIELD].HH.RH:=Q;CURLIST.TAILFIELD:=Q;GOTO 60{:999};
10:END;{:988}{1254:}{495:}FUNCTION OPENFMTFILE:BOOLEAN;LABEL 40,10;
VAR J:0..BUFSIZE;
BEGIN IF BUFFER[CURINPUT.LOCFIELD]=38 THEN BEGIN CURINPUT.LOCFIELD:=
CURINPUT.LOCFIELD+1;J:=CURINPUT.LOCFIELD;BUFFER[LAST]:=32;
WHILE BUFFER[J]<>32 DO J:=J+1;PACKBUFFERED(0,CURINPUT.LOCFIELD,J-1);
IF WOPENIN(FMTFILE)THEN BEGIN CURINPUT.LOCFIELD:=J;GOTO 40;END;
PACKBUFFERED(9,CURINPUT.LOCFIELD,J-1);
IF WOPENIN(FMTFILE)THEN BEGIN CURINPUT.LOCFIELD:=J;GOTO 40;END;
WRITELN(TTY,'Sorry, I can''t find that format; will try PLAIN.');END;
PACKBUFFERED(14,1,0);
IF NOT WOPENIN(FMTFILE)THEN BEGIN WRITELN(TTY,
'I can''t find the PLAIN format file!');OPENFMTFILE:=FALSE;GOTO 10;END;
40:OPENFMTFILE:=TRUE;10:END;{:495}FUNCTION LOADFMTFILE:BOOLEAN;
LABEL 6666,10;VAR J,K:INTEGER;P,Q:HALFWORD;X:INTEGER;W:FOURQUARTERS;
BEGIN{1259:}X:=FMTFILE↑.INT;IF X<>463829795 THEN GOTO 6666;
BEGIN GET(FMTFILE);X:=FMTFILE↑.INT;END;IF X<>25000 THEN GOTO 6666;
BEGIN GET(FMTFILE);X:=FMTFILE↑.INT;END;IF X<>4551 THEN GOTO 6666;
BEGIN GET(FMTFILE);X:=FMTFILE↑.INT;END;IF X<>1777 THEN GOTO 6666;
BEGIN GET(FMTFILE);X:=FMTFILE↑.INT;END;IF X<>307 THEN GOTO 6666{:1259};
{1261:}BEGIN BEGIN GET(FMTFILE);X:=FMTFILE↑.INT;END;
IF X<0 THEN GOTO 6666;
IF X>POOLSIZE THEN BEGIN WRITELN(TTY,'---! Must increase the ',
'string pool size');GOTO 6666;END ELSE POOLPTR:=X;END;
BEGIN BEGIN GET(FMTFILE);X:=FMTFILE↑.INT;END;IF X<0 THEN GOTO 6666;
IF X>MAXSTRINGS THEN BEGIN WRITELN(TTY,'---! Must increase the ',
'max strings');GOTO 6666;END ELSE STRPTR:=X;END;
FOR K:=0 TO STRPTR DO BEGIN BEGIN GET(FMTFILE);X:=FMTFILE↑.INT;END;
IF(X<0)OR(X>POOLPTR)THEN GOTO 6666 ELSE STRSTART[K]:=X;END;K:=0;
WHILE K+4<POOLPTR DO BEGIN BEGIN GET(FMTFILE);W:=FMTFILE↑.QQQQ;END;
STRPOOL[K]:=W.B0;STRPOOL[K+1]:=W.B1;STRPOOL[K+2]:=W.B2;
STRPOOL[K+3]:=W.B3;K:=K+4;END;K:=POOLPTR-4;BEGIN GET(FMTFILE);
W:=FMTFILE↑.QQQQ;END;STRPOOL[K]:=W.B0;STRPOOL[K+1]:=W.B1;
STRPOOL[K+2]:=W.B2;STRPOOL[K+3]:=W.B3{:1261};{1263:}
BEGIN BEGIN GET(FMTFILE);X:=FMTFILE↑.INT;END;
IF(X<0)OR(X>25000)THEN GOTO 6666 ELSE ROVER:=X;END;P:=0;Q:=ROVER;X:=0;
REPEAT FOR K:=P TO Q+1 DO BEGIN GET(FMTFILE);MEM[K]:=FMTFILE↑;END;
P:=Q+MEM[Q].HH.LH;
IF(P>25000)OR((Q>=MEM[Q+1].HH.RH)AND(MEM[Q+1].HH.RH<>ROVER))THEN GOTO
6666;Q:=MEM[Q+1].HH.RH;UNTIL Q=ROVER;BEGIN BEGIN GET(FMTFILE);
X:=FMTFILE↑.INT;END;IF X<25000 THEN GOTO 6666;
IF X>MEMMAX THEN BEGIN WRITELN(TTY,'---! Must increase the ','mem max');
GOTO 6666;END ELSE MEMEND:=X;END;BEGIN BEGIN GET(FMTFILE);
X:=FMTFILE↑.INT;END;IF(X<0)OR(X>MEMEND)THEN GOTO 6666 ELSE AVAIL:=X;END;
FOR K:=P TO MEMEND DO BEGIN GET(FMTFILE);MEM[K]:=FMTFILE↑;END;
BEGIN GET(FMTFILE);VARUSED:=FMTFILE↑.INT;END;BEGIN GET(FMTFILE);
DYNUSED:=FMTFILE↑.INT;END;MAXVARUSED:=VARUSED{:1263};{1265:}{1268:}K:=1;
REPEAT BEGIN GET(FMTFILE);X:=FMTFILE↑.INT;END;
IF(X<1)OR(K+X>4552)THEN GOTO 6666;
FOR J:=K TO K+X-1 DO BEGIN GET(FMTFILE);EQTB[J]:=FMTFILE↑;END;K:=K+X;
BEGIN GET(FMTFILE);X:=FMTFILE↑.INT;END;
IF(X<0)OR(K+X>4552)THEN GOTO 6666;
FOR J:=K TO K+X-1 DO EQTB[J]:=EQTB[K-1];K:=K+X;UNTIL K>4551{:1268};
BEGIN BEGIN GET(FMTFILE);X:=FMTFILE↑.INT;END;
IF(X<258)OR(X>2358)THEN GOTO 6666 ELSE PARLOC:=X;END;
PARTOKEN:=4096+PARLOC;BEGIN BEGIN GET(FMTFILE);X:=FMTFILE↑.INT;END;
IF(X<258)OR(X>2358)THEN GOTO 6666 ELSE WRITELOC:=X;END;{1270:}
BEGIN BEGIN GET(FMTFILE);X:=FMTFILE↑.INT;END;
IF(X<258)OR(X>2358)THEN GOTO 6666 ELSE HASHUSED:=X;END;P:=257;
REPEAT BEGIN BEGIN GET(FMTFILE);X:=FMTFILE↑.INT;END;
IF(X<P+1)OR(X>HASHUSED)THEN GOTO 6666 ELSE P:=X;END;BEGIN GET(FMTFILE);
HASH[P]:=FMTFILE↑.HH;END;UNTIL P=HASHUSED;
FOR P:=HASHUSED+1 TO 2367 DO BEGIN GET(FMTFILE);HASH[P]:=FMTFILE↑.HH;
END;BEGIN GET(FMTFILE);CSCOUNT:=FMTFILE↑.INT;END{:1270}{:1265};{1272:}
BEGIN BEGIN GET(FMTFILE);X:=FMTFILE↑.INT;END;IF X<7 THEN GOTO 6666;
IF X>FONTMEMSIZE THEN BEGIN WRITELN(TTY,'---! Must increase the ',
'font mem size');GOTO 6666;END ELSE FMEMPTR:=X;END;
FOR K:=0 TO FMEMPTR-1 DO BEGIN GET(FMTFILE);FONTINFO[K]:=FMTFILE↑;END;
BEGIN BEGIN GET(FMTFILE);X:=FMTFILE↑.INT;END;IF X<0 THEN GOTO 6666;
IF X>FONTMAX THEN BEGIN WRITELN(TTY,'---! Must increase the ','font max'
);GOTO 6666;END ELSE FONTPTR:=X;END;FOR K:=0 TO FONTPTR DO{1274:}
BEGIN BEGIN BEGIN GET(FMTFILE);X:=FMTFILE↑.INT;END;
IF(X<1)OR(X>2368)THEN GOTO 6666 ELSE FONTIDENT[K]:=X;END;
BEGIN GET(FMTFILE);FONTCHECK[K]:=FMTFILE↑.QQQQ;END;BEGIN GET(FMTFILE);
FONTSIZE[K]:=FMTFILE↑.INT;END;BEGIN GET(FMTFILE);
FONTDSIZE[K]:=FMTFILE↑.INT;END;BEGIN BEGIN GET(FMTFILE);X:=FMTFILE↑.INT;
END;IF(X<0)OR(X>262143)THEN GOTO 6666 ELSE FONTPARAMS[K]:=X;END;
BEGIN BEGIN GET(FMTFILE);X:=FMTFILE↑.INT;END;
IF(X<0)OR(X>STRPTR)THEN GOTO 6666 ELSE FONTNAME[K]:=X;END;
BEGIN BEGIN GET(FMTFILE);X:=FMTFILE↑.INT;END;
IF(X<0)OR(X>STRPTR)THEN GOTO 6666 ELSE FONTAREA[K]:=X;END;
BEGIN BEGIN GET(FMTFILE);X:=FMTFILE↑.INT;END;
IF(X<0)OR(X>255)THEN GOTO 6666 ELSE FONTBC[K]:=X;END;
BEGIN BEGIN GET(FMTFILE);X:=FMTFILE↑.INT;END;
IF(X<0)OR(X>255)THEN GOTO 6666 ELSE FONTEC[K]:=X;END;BEGIN GET(FMTFILE);
CHARBASE[K]:=FMTFILE↑.INT;END;BEGIN GET(FMTFILE);
WIDTHBASE[K]:=FMTFILE↑.INT;END;BEGIN GET(FMTFILE);
HEIGHTBASE[K]:=FMTFILE↑.INT;END;BEGIN GET(FMTFILE);
DEPTHBASE[K]:=FMTFILE↑.INT;END;BEGIN GET(FMTFILE);
ITALICBASE[K]:=FMTFILE↑.INT;END;BEGIN GET(FMTFILE);
LIGKERNBASE[K]:=FMTFILE↑.INT;END;BEGIN GET(FMTFILE);
KERNBASE[K]:=FMTFILE↑.INT;END;BEGIN GET(FMTFILE);
EXTENBASE[K]:=FMTFILE↑.INT;END;BEGIN GET(FMTFILE);
PARAMBASE[K]:=FMTFILE↑.INT;END;BEGIN BEGIN GET(FMTFILE);X:=FMTFILE↑.INT;
END;IF(X<0)OR(X>25000)THEN GOTO 6666 ELSE FONTGLUE[K]:=X;END;END{:1274}
{:1272};{1276:}BEGIN BEGIN GET(FMTFILE);X:=FMTFILE↑.INT;END;
IF(X<0)OR(X>307)THEN GOTO 6666 ELSE HYPHCOUNT:=X;END;
FOR K:=1 TO HYPHCOUNT DO BEGIN BEGIN BEGIN GET(FMTFILE);X:=FMTFILE↑.INT;
END;IF(X<0)OR(X>307)THEN GOTO 6666 ELSE J:=X;END;
BEGIN BEGIN GET(FMTFILE);X:=FMTFILE↑.INT;END;
IF(X<0)OR(X>STRPTR)THEN GOTO 6666 ELSE HYPHWORD[J]:=X;END;
BEGIN BEGIN GET(FMTFILE);X:=FMTFILE↑.INT;END;
IF(X<0)OR(X>262143)THEN GOTO 6666 ELSE HYPHLIST[J]:=X;END;END;
BEGIN BEGIN GET(FMTFILE);X:=FMTFILE↑.INT;END;IF X<0 THEN GOTO 6666;
IF X>TRIESIZE THEN BEGIN WRITELN(TTY,'---! Must increase the ',
'trie size');GOTO 6666;END ELSE TRIEMAX:=X;END;
FOR K:=0 TO TRIEMAX DO BEGIN GET(FMTFILE);TRIE[K]:=FMTFILE↑.HH;END;
BEGIN BEGIN GET(FMTFILE);X:=FMTFILE↑.INT;END;
IF(X<0)OR(X>511)THEN GOTO 6666 ELSE TRIEOPPTR:=X;END;
FOR K:=1 TO TRIEOPPTR DO BEGIN BEGIN BEGIN GET(FMTFILE);X:=FMTFILE↑.INT;
END;IF(X<0)OR(X>63)THEN GOTO 6666 ELSE HYFDISTANCE[K]:=X;END;
BEGIN BEGIN GET(FMTFILE);X:=FMTFILE↑.INT;END;
IF(X<0)OR(X>63)THEN GOTO 6666 ELSE HYFNUM[K]:=X;END;
BEGIN BEGIN GET(FMTFILE);X:=FMTFILE↑.INT;END;
IF(X<0)OR(X>511)THEN GOTO 6666 ELSE HYFNEXT[K]:=X;END;END{:1276};{1278:}
BEGIN BEGIN GET(FMTFILE);X:=FMTFILE↑.INT;END;
IF(X<0)OR(X>3)THEN GOTO 6666 ELSE INTERACTION:=X;END;
BEGIN BEGIN GET(FMTFILE);X:=FMTFILE↑.INT;END;
IF(X<0)OR(X>STRPTR)THEN GOTO 6666 ELSE FORMATIDENT:=X;END;
BEGIN GET(FMTFILE);X:=FMTFILE↑.INT;END;
IF(X<>69069)OR EOF(FMTFILE)THEN GOTO 6666{:1278};LOADFMTFILE:=TRUE;
GOTO 10;6666:WRITELN(TTY,'(Fatal format file error; I''m stymied)');
LOADFMTFILE:=FALSE;10:END;{:1254}{1281:}{1285:}PROCEDURE CLOSEFILESAN;
VAR K:INTEGER;BEGIN{1318:}
FOR K:=0 TO 15 DO IF WRITEOPEN[K]THEN ACLOSE(WRITEFILE[K]){:1318};
IF EQTB[3881].INT<>0 THEN{1286:}BEGIN PRINTNL(1106);PRINTLN;
PRINTINT(STRPTR);PRINT(1092);PRINTINT(POOLPTR);PRINTNL(1105);
PRINTINT(MAXSTRINGS);PRINTCHAR(32);PRINTINT(POOLSIZE);PRINTNL(1107);
PRINTINT(MAXVARUSED);PRINTCHAR(38);PRINTINT(MEMEND-24999);PRINTNL(1105);
PRINTINT(25000);PRINTCHAR(38);PRINTINT(MEMMAX-24999);PRINTLN;
PRINTINT(CSCOUNT);PRINT(1094);PRINTNL(1105);PRINTINT(2100);PRINTLN;
PRINTINT(FMEMPTR);PRINT(1095);PRINTINT(FONTPTR-0);PRINT(1108);
IF FONTPTR<>1 THEN PRINTCHAR(115);PRINTNL(1105);PRINTINT(FONTMEMSIZE);
PRINTCHAR(32);PRINTINT(FONTMAX-0);PRINTLN;PRINTINT(HYPHCOUNT);
PRINT(1098);IF HYPHCOUNT<>1 THEN PRINTCHAR(115);PRINTNL(1105);
PRINTINT(307);PRINTNL(1109);PRINTINT(MAXINSTACK);PRINT(1110);
PRINTINT(MAXNESTSTACK);PRINT(1111);PRINTINT(MAXPARAMSTAC);PRINT(1112);
PRINTINT(MAXBUFSTACK+1);PRINT(1113);PRINTINT(MAXSAVESTACK+6);
PRINTCHAR(115);PRINTNL(1105);PRINTINT(STACKSIZE);PRINT(1110);
PRINTINT(NESTSIZE);PRINT(1111);PRINTINT(PARAMSIZE);PRINT(1112);
PRINTINT(BUFSIZE);PRINT(1113);PRINTINT(SAVESIZE);PRINTCHAR(115);
END{:1286};{613:}
IF TOTALPAGES=0 THEN PRINTNL(656)ELSE BEGIN BEGIN DVIBUF[DVIPTR]:=248;
DVIPTR:=DVIPTR+1;IF DVIPTR=DVILIMIT THEN DVISWAP;END;DVIFOUR(LASTBOP);
LASTBOP:=DVIOFFSET+DVIPTR-5;DVIFOUR(25400000);DVIFOUR(473628672);
PREPAREMAG;DVIFOUR(EQTB[3867].INT);DVIFOUR(MAXV);DVIFOUR(MAXH);
BEGIN DVIBUF[DVIPTR]:=MAXPUSH DIV 256;DVIPTR:=DVIPTR+1;
IF DVIPTR=DVILIMIT THEN DVISWAP;END;
BEGIN DVIBUF[DVIPTR]:=MAXPUSH MOD 256;DVIPTR:=DVIPTR+1;
IF DVIPTR=DVILIMIT THEN DVISWAP;END;
BEGIN DVIBUF[DVIPTR]:=TOTALPAGES DIV 256;DVIPTR:=DVIPTR+1;
IF DVIPTR=DVILIMIT THEN DVISWAP;END;
BEGIN DVIBUF[DVIPTR]:=TOTALPAGES MOD 256;DVIPTR:=DVIPTR+1;
IF DVIPTR=DVILIMIT THEN DVISWAP;END;{614:}
WHILE FONTPTR>0 DO BEGIN IF FONTUSED[FONTPTR]THEN DVIFONTDEF(FONTPTR);
FONTPTR:=FONTPTR-1;END{:614};BEGIN DVIBUF[DVIPTR]:=249;DVIPTR:=DVIPTR+1;
IF DVIPTR=DVILIMIT THEN DVISWAP;END;DVIFOUR(LASTBOP);
BEGIN DVIBUF[DVIPTR]:=2;DVIPTR:=DVIPTR+1;
IF DVIPTR=DVILIMIT THEN DVISWAP;END;K:=4+((DVIBUFSIZE-DVIPTR)MOD 4);
WHILE K>0 DO BEGIN BEGIN DVIBUF[DVIPTR]:=223;DVIPTR:=DVIPTR+1;
IF DVIPTR=DVILIMIT THEN DVISWAP;END;K:=K-1;END;{570:}
IF DVILIMIT=HALFBUF THEN WRITEDVI(HALFBUF,DVIBUFSIZE-1);
IF DVIPTR>0 THEN WRITEDVI(0,DVIPTR-1){:570};PRINTNL(657);
PRINT(OUTPUTFILENA);PRINT(152);PRINTINT(TOTALPAGES);PRINT(658);
IF TOTALPAGES<>1 THEN PRINTCHAR(115);PRINT(659);
PRINTINT(DVIOFFSET+DVIPTR);PRINT(660);BCLOSE(DVIFILE);
IF PSEUDOTYPEIN=0 THEN BEGIN K:=SELECTOR;SELECTOR:=21;
POOLPTR:=STRSTART[STRPTR];PRINT(661);PRINT(OUTPUTFILENA);SELECTOR:=K;
BEGIN IF POOLPTR+1>POOLSIZE THEN OVERFLOW(129,POOLSIZE);END;
PSEUDOTYPEIN:=MAKESTRING;END;END{:613};
IF JOBNAME>0 THEN BEGIN WRITELN(LOGFILE);ACLOSE(LOGFILE);END;
IF(PSEUDOTYPEIN<>0)AND(INTERACTION>0)THEN BEGIN WRITELN(TTY);
FOR K:=STRSTART[PSEUDOTYPEIN]TO STRSTART[PSEUDOTYPEIN+1]-1 DO PTWR1W(0,
ORD(XCHR[STRPOOL[K]]));;END;END;{:1285}{1287:}PROCEDURE FINALCLEANUP;
LABEL 10;VAR C:SMALLNUMBER;BEGIN C:=CURCHR;
IF JOBNAME=0 THEN OPENLOGFILE;IF CURLEVEL>1 THEN BEGIN PRINTNL(1114);
PRINTINT(CURLEVEL-1);PRINTCHAR(41);END;
WHILE CONDPTR<>0 DO BEGIN PRINTNL(1115);PRINTCMDCHR(101,CURIF);
IF IFLINE<>0 THEN BEGIN PRINT(1116);PRINTINT(IFLINE);END;PRINT(1117);
IFLINE:=MEM[CONDPTR+1].INT;CURIF:=MEM[CONDPTR].HH.B1;
CONDPTR:=MEM[CONDPTR].HH.RH;END;IF HISTORY=1 THEN PRINTNL(1118);
IF C=1 THEN BEGIN STOREFMTFILE;GOTO 10;PRINTNL(1119);GOTO 10;END;10:END;
{:1287}{1288:}PROCEDURE INITPRIM;BEGIN NONEWCONTROL:=FALSE;{222:}
PRIMITIVE(239,73,0);PRIMITIVE(240,73,1);PRIMITIVE(241,73,2);
PRIMITIVE(242,73,3);PRIMITIVE(243,73,4);PRIMITIVE(244,73,5);
PRIMITIVE(245,73,6);PRIMITIVE(246,73,7);PRIMITIVE(247,73,8);
PRIMITIVE(248,73,9);PRIMITIVE(249,73,10);PRIMITIVE(250,73,11);
PRIMITIVE(251,73,12);PRIMITIVE(252,73,13);PRIMITIVE(253,73,14);
PRIMITIVE(254,73,15);PRIMITIVE(255,73,16);{:222}{225:}
PRIMITIVE(257,70,2899);PRIMITIVE(258,70,2900);PRIMITIVE(259,70,2901);
PRIMITIVE(260,70,2902);PRIMITIVE(261,70,2903);{:225}{230:}
PRIMITIVE(262,71,0);PRIMITIVE(263,71,1);PRIMITIVE(264,71,2);
PRIMITIVE(265,71,3);PRIMITIVE(266,71,4);PRIMITIVE(267,71,5);
PRIMITIVE(268,71,6);PRIMITIVE(269,71,7);PRIMITIVE(270,71,8);
PRIMITIVE(271,71,9);PRIMITIVE(272,71,10);PRIMITIVE(273,71,11);
PRIMITIVE(274,71,12);PRIMITIVE(275,71,13);PRIMITIVE(276,71,14);
PRIMITIVE(277,71,15);PRIMITIVE(278,71,16);PRIMITIVE(279,71,17);
PRIMITIVE(280,71,18);PRIMITIVE(281,71,19);PRIMITIVE(282,71,20);
PRIMITIVE(283,71,21);PRIMITIVE(284,71,22);PRIMITIVE(285,71,23);
PRIMITIVE(286,71,24);PRIMITIVE(287,71,25);PRIMITIVE(288,71,26);
PRIMITIVE(289,71,27);PRIMITIVE(290,71,28);PRIMITIVE(291,71,29);
PRIMITIVE(292,71,30);PRIMITIVE(293,71,31);PRIMITIVE(294,71,32);
PRIMITIVE(295,71,33);PRIMITIVE(296,71,34);PRIMITIVE(297,71,35);
PRIMITIVE(298,71,36);PRIMITIVE(299,71,37);PRIMITIVE(300,71,38);
PRIMITIVE(301,71,39);PRIMITIVE(302,71,40);PRIMITIVE(303,71,41);
PRIMITIVE(304,71,42);{:230}{237:}PRIMITIVE(306,72,0);
PRIMITIVE(307,72,1);PRIMITIVE(308,72,2);PRIMITIVE(309,72,3);
PRIMITIVE(310,72,4);PRIMITIVE(311,72,5);PRIMITIVE(312,72,6);
PRIMITIVE(313,72,7);PRIMITIVE(314,72,8);PRIMITIVE(315,72,9);
PRIMITIVE(316,72,10);PRIMITIVE(317,72,11);PRIMITIVE(318,72,12);
PRIMITIVE(319,72,13);PRIMITIVE(320,72,14);PRIMITIVE(321,72,15);
PRIMITIVE(322,72,16);PRIMITIVE(323,72,17);PRIMITIVE(324,72,18);{:237}
{252:}PRIMITIVE(32,62,0);PRIMITIVE(47,42,0);PRIMITIVE(331,43,0);
PRIMITIVE(332,16,0);PRIMITIVE(333,103,0);PRIMITIVE(334,15,0);
PRIMITIVE(335,64,0);PRIMITIVE(336,99,0);PRIMITIVE(337,83,0);
PRIMITIVE(338,90,0);PRIMITIVE(339,59,0);PRIMITIVE(340,86,0);
PRIMITIVE(341,60,0);HASH[2360].RH:=341;EQTB[2360]:=EQTB[CURVAL];
PRIMITIVE(342,32,0);PRIMITIVE(343,36,0);PRIMITIVE(344,39,0);
PRIMITIVE(198,37,0);PRIMITIVE(345,69,0);PRIMITIVE(217,18,0);
PRIMITIVE(346,44,0);PRIMITIVE(347,17,0);PRIMITIVE(348,87,0);
PRIMITIVE(349,52,0);PRIMITIVE(350,34,0);PRIMITIVE(203,53,0);
PRIMITIVE(351,61,0);PRIMITIVE(352,79,0);PRIMITIVE(353,40,0);
PRIMITIVE(354,76,0);PRIMITIVE(355,63,0);PRIMITIVE(356,88,0);
PRIMITIVE(357,0,256);HASH[2365].RH:=357;EQTB[2365]:=EQTB[CURVAL];
PRIMITIVE(358,95,0);PRIMITIVE(359,74,0);PRIMITIVE(360,25,0);
PRIMITIVE(218,38,0);PRIMITIVE(361,33,0);PRIMITIVE(362,54,0);
PRIMITIVE(363,35,0);{:252}{317:}PRIMITIVE(417,13,0);PARLOC:=CURVAL;
PARTOKEN:=4096+PARLOC;{:317}{357:}PRIMITIVE(451,100,0);
PRIMITIVE(452,100,1);{:357}{365:}PRIMITIVE(453,105,0);
PRIMITIVE(454,105,1);PRIMITIVE(455,105,2);PRIMITIVE(456,105,3);
PRIMITIVE(457,105,4);{:365}{389:}PRIMITIVE(484,68,0);
PRIMITIVE(485,68,1);PRIMITIVE(486,68,2);PRIMITIVE(487,68,3);
PRIMITIVE(488,67,0);PRIMITIVE(489,67,1);{:389}{394:}
PRIMITIVE(492,75,99);PRIMITIVE(493,75,1);PRIMITIVE(494,78,0);
PRIMITIVE(495,78,1);{:394}{445:}PRIMITIVE(564,104,0);
PRIMITIVE(565,104,1);PRIMITIVE(566,104,2);{:445}{461:}
PRIMITIVE(579,101,0);PRIMITIVE(580,101,1);PRIMITIVE(581,101,2);
PRIMITIVE(582,101,3);PRIMITIVE(583,101,4);PRIMITIVE(584,101,5);
PRIMITIVE(585,101,6);PRIMITIVE(586,101,7);PRIMITIVE(587,101,8);
PRIMITIVE(588,101,9);PRIMITIVE(589,101,10);PRIMITIVE(590,101,11);
PRIMITIVE(591,101,12);{:461}{465:}PRIMITIVE(592,102,2);
HASH[2362].RH:=592;EQTB[2362]:=EQTB[CURVAL];PRIMITIVE(593,102,4);
PRIMITIVE(594,102,3);{:465}{524:}PRIMITIVE(622,82,0);HASH[2367].RH:=622;
EQTB[2367]:=EQTB[CURVAL];{:524}{745:}PRIMITIVE(381,4,128);
PRIMITIVE(383,5,129);HASH[2359].RH:=383;EQTB[2359]:=EQTB[CURVAL];
HASH[2363].RH:=720;HASH[2364].RH:=720;EQTB[2364].HH.B0:=9;
EQTB[2364].HH.RH:=25011;EQTB[2364].HH.B1:=1;EQTB[2363]:=EQTB[2364];
EQTB[2363].HH.B0:=110;EQTB[2363].HH.RH:=25011;{:745}{943:}
PRIMITIVE(779,77,0);PRIMITIVE(780,77,1);PRIMITIVE(781,77,2);
PRIMITIVE(782,77,3);PRIMITIVE(783,77,4);PRIMITIVE(784,77,5);
PRIMITIVE(785,77,6);PRIMITIVE(786,77,7);{:943}{1010:}
PRIMITIVE(832,14,0);PRIMITIVE(833,14,1);{:1010}{1016:}
PRIMITIVE(835,26,4);PRIMITIVE(836,26,0);PRIMITIVE(837,26,1);
PRIMITIVE(838,26,2);PRIMITIVE(839,26,3);PRIMITIVE(840,27,4);
PRIMITIVE(841,27,0);PRIMITIVE(842,27,1);PRIMITIVE(843,27,2);
PRIMITIVE(844,27,3);PRIMITIVE(204,28,5);PRIMITIVE(207,29,1);
PRIMITIVE(208,30,99);{:1016}{1029:}PRIMITIVE(864,21,1);
PRIMITIVE(865,21,0);PRIMITIVE(866,22,1);PRIMITIVE(867,22,0);
PRIMITIVE(868,20,0);PRIMITIVE(869,20,1);PRIMITIVE(870,20,2);
PRIMITIVE(871,20,3);PRIMITIVE(872,20,4);PRIMITIVE(873,20,5);
PRIMITIVE(874,20,103);PRIMITIVE(875,31,99);PRIMITIVE(876,31,100);
PRIMITIVE(877,31,101);PRIMITIVE(878,31,102);{:1029}{1046:}
PRIMITIVE(892,41,1);PRIMITIVE(893,41,0);{:1046}{1066:}
PRIMITIVE(897,23,0);PRIMITIVE(898,23,1);PRIMITIVE(899,24,0);
PRIMITIVE(900,24,1);{:1066}{1073:}PRIMITIVE(45,45,1);
PRIMITIVE(215,45,0);{:1073}{1104:}PRIMITIVE(938,46,0);
PRIMITIVE(939,46,1);{:1104}{1119:}PRIMITIVE(685,48,16);
PRIMITIVE(686,48,17);PRIMITIVE(687,48,18);PRIMITIVE(688,48,19);
PRIMITIVE(689,48,20);PRIMITIVE(690,48,21);PRIMITIVE(691,48,22);
PRIMITIVE(694,48,26);PRIMITIVE(693,48,27);PRIMITIVE(940,49,0);
PRIMITIVE(697,49,1);PRIMITIVE(698,49,2);{:1119}{1131:}
PRIMITIVE(680,51,0);PRIMITIVE(681,51,2);PRIMITIVE(682,51,4);
PRIMITIVE(683,51,6);{:1131}{1140:}PRIMITIVE(954,50,0);
PRIMITIVE(955,50,1);PRIMITIVE(956,50,2);PRIMITIVE(957,50,3);
PRIMITIVE(958,50,4);PRIMITIVE(959,50,5);{:1140}{1149:}
PRIMITIVE(695,47,30);PRIMITIVE(696,47,31);HASH[2361].RH:=696;
EQTB[2361]:=EQTB[CURVAL];{:1149}{1169:}PRIMITIVE(979,84,1);
PRIMITIVE(980,84,2);PRIMITIVE(981,84,4);PRIMITIVE(982,89,0);
PRIMITIVE(983,89,1);PRIMITIVE(984,89,2);PRIMITIVE(985,89,3);{:1169}
{1180:}PRIMITIVE(998,85,0);PRIMITIVE(999,85,1);{:1180}{1188:}
PRIMITIVE(1000,80,3210);PRIMITIVE(1001,80,3338);PRIMITIVE(1002,80,3466);
PRIMITIVE(1003,80,3594);PRIMITIVE(1004,80,3722);PRIMITIVE(1005,80,4149);
PRIMITIVE(703,81,3161);PRIMITIVE(704,81,3177);PRIMITIVE(705,81,3193);
{:1188}{1193:}PRIMITIVE(1010,91,0);PRIMITIVE(1011,91,1);
PRIMITIVE(1012,91,2);PRIMITIVE(1013,91,3);PRIMITIVE(1014,92,0);
PRIMITIVE(1015,92,1);PRIMITIVE(1016,92,2);PRIMITIVE(1017,92,3);
PRIMITIVE(1018,93,0);PRIMITIVE(1019,93,1);PRIMITIVE(1020,93,2);
PRIMITIVE(1021,93,3);PRIMITIVE(1022,94,0);PRIMITIVE(1023,94,1);
PRIMITIVE(1024,94,2);PRIMITIVE(1025,94,3);{:1193}{1209:}
PRIMITIVE(1041,96,0);PRIMITIVE(1042,96,1);{:1209}{1219:}
PRIMITIVE(1053,97,0);PRIMITIVE(1054,97,1);PRIMITIVE(1055,97,2);
PRIMITIVE(1056,97,3);{:1219}{1224:}PRIMITIVE(1057,58,1);
PRIMITIVE(1058,58,0);{:1224}{1229:}PRIMITIVE(1059,56,0);
PRIMITIVE(1060,56,1);{:1229}{1237:}PRIMITIVE(1066,55,3466);
PRIMITIVE(1067,55,3594);{:1237}{1242:}PRIMITIVE(1068,19,0);
PRIMITIVE(1069,19,1);PRIMITIVE(1070,19,2);PRIMITIVE(1071,19,3);{:1242}
{1296:}PRIMITIVE(1120,57,0);PRIMITIVE(1121,57,1);WRITELOC:=CURVAL;
PRIMITIVE(1122,57,2);PRIMITIVE(1123,57,3);PRIMITIVE(1124,57,4);{:1296};
NONEWCONTROL:=TRUE;END;{:1288}{1290:}{PROCEDURE DEBUGHELP;LABEL 888,10;
VAR K,L,M,N:INTEGER;BEGIN WHILE TRUE DO BEGIN PRINTNL(35);BREAK(TTY);
READ(TTY,M);IF M<0 THEN GOTO 10 ELSE IF M=0 THEN BEGIN GOTO 888;
888:M:=0;
['BREAKPOINT']
END ELSE BEGIN READ(TTY,N);CASE M OF[1291:]1:PRINTMEMORYW(MEM[N]);
2:PRINTINT(MEM[N].HH.LH);3:PRINTINT(MEM[N].HH.RH);
4:PRINTMEMORYW(EQTB[N]);5:PRINTMEMORYW(FONTINFO[N]);
6:PRINTMEMORYW(SAVESTACK[N]);7:SHOWBOX(N);8:BEGIN BREADTHMAX:=10000;
DEPTHTHRESHO:=POOLSIZE-POOLPTR-10;SHOWNODELIST(N);END;
9:SHOWTOKENLIS(N,0,1000);10:PRINT(N);11:CHECKMEM(N>0);12:SEARCHMEM(N);
13:BEGIN READ(TTY,L);PRINTCMDCHR(N,L);END;
14:FOR K:=0 TO N DO PRINT(BUFFER[K]);15:BEGIN FONTINSHORTD:=0;
SHORTDISPLAY(N);END;[:1291]OTHERS:PRINT(63)END;END;END;10:END;}{:1290}
{:1281}{1284:}BEGIN;IF READYALREADY=314159 THEN GOTO 1;INITIALIZE;{14:}
BAD:=0;IF(HALFERRORLIN<30)OR(HALFERRORLIN>ERRORLINE-15)THEN BAD:=1;
IF MAXPRINTLINE<60 THEN BAD:=2;IF DVIBUFSIZE MOD 8<>0 THEN BAD:=3;
IF(25000<100)OR(25100>MEMMAX)THEN BAD:=4;IF 1777>2100 THEN BAD:=5;{:14}
{109:}IF(0>0)OR(511<127)THEN BAD:=11;
IF(0>0)OR(262143<32767)THEN BAD:=12;IF(0<0)OR(511>262143)THEN BAD:=13;
IF(0<0)OR(MEMMAX>=262143)THEN BAD:=14;
IF(0<0)OR(FONTMAX>511)THEN BAD:=15;IF FONTMAX>256 THEN BAD:=16;
IF(SAVESIZE>262143)OR(MAXSTRINGS>262143)THEN BAD:=17;
IF(BUFSIZE>262143)THEN BAD:=18;{:109}{275:}IF 6464>262143 THEN BAD:=21;
{:275}{493:}IF 18>FILENAMESIZE THEN BAD:=31;{:493}{1208:}
IF 2*262143<25000 THEN BAD:=41;{:1208}IF BAD>0 THEN BEGIN WRITE(TTY,
'Ouch---my internal constants have been clobbered!');
WRITE(TTY,'---case ',BAD:0);GOTO 9999;END;
IF NOT INITSTRINGS THEN GOTO 9999;INITPRIM;1:{55:}SELECTOR:=17;TALLY:=0;
TERMOFFSET:=0;FILEOFFSET:=0;{:55}{60:}
WRITE(TTY,'This is TeX, WAITS Version 0.95');
IF FORMATIDENT=0 THEN WRITELN(TTY,' (no format preloaded)')ELSE BEGIN
PRINT(FORMATIDENT);PRINTLN;END;{:60}{499:}JOBNAME:=0;
NAMEINPROGRE:=FALSE;{:499}{504:}OUTPUTFILENA:=0;{:504};{1289:}
BEGIN{314:}BEGIN INPUTPTR:=0;MAXINSTACK:=0;INOPEN:=0;MAXBUFSTACK:=0;
PARAMPTR:=0;MAXPARAMSTAC:=0;SCANNERSTATU:=0;FIRST:=0;
CURINPUT.STATEFIELD:=33;CURINPUT.STARTFIELD:=0;CURINPUT.INDEXFIELD:=0;
LINE:=0;CURINPUT.NAMEFIELD:=0;FORCEEOF:=FALSE;ALIGNSTATE:=1000000;
IF NOT INITTERMINAL THEN GOTO 9999;CURINPUT.LIMITFIELD:=LAST;
FIRST:=LAST+1;END{:314};
IF(FORMATIDENT=0)OR(BUFFER[CURINPUT.LOCFIELD]=38)THEN BEGIN IF
FORMATIDENT<>0 THEN INITIALIZE;IF NOT OPENFMTFILE THEN GOTO 9999;
IF NOT LOADFMTFILE THEN BEGIN WCLOSE(FMTFILE);GOTO 9999;END;
WCLOSE(FMTFILE);
WHILE(CURINPUT.LOCFIELD<CURINPUT.LIMITFIELD)AND(BUFFER[CURINPUT.LOCFIELD
]=32)DO CURINPUT.LOCFIELD:=CURINPUT.LOCFIELD+1;END;
BUFFER[CURINPUT.LIMITFIELD]:=13;FIXDATEANDTI;{730:}
MAGICOFFSET:=STRSTART[714]-9*16{:730};{74:}
IF INTERACTION=0 THEN SELECTOR:=16 ELSE SELECTOR:=17{:74};
IF(CURINPUT.LOCFIELD<CURINPUT.LIMITFIELD)AND(EQTB[3210+BUFFER[CURINPUT.
LOCFIELD]].HH.RH<>0)THEN STARTINPUT;END{:1289};MAINCONTROL;FINALCLEANUP;
9998:CLOSEFILESAN;9999:READYALREADY:=0;END.{:1284}